-
Content Count
1019 -
Joined
-
Last visited
-
Days Won
66
Posts posted by pyscripter
-
-
2 hours ago, Uwe Raabe said:Indeed, for me the biggest enhancement is the handling of font sizes regarding dpi changes. This eliminates a plethora of workarounds
The problem is that if you maintain open source components that support many versions of Delphi, this does not eliminate anything. It just adds another IFDEF in the code. Having said that, it is good to see it fixed.
-
2
-
-
1 hour ago, Uwe Raabe said:Besides that, there are currently 15 issues I reported in Quality Portal marked fixed in this release.
@Uwe RaabeUnfortunately though, your [RSP-35301] Option to design in Screen PPI but save in 96 PPI - Embarcadero Technologies is not, despite the many votes it got. And by the way thanks for your article. Highly recommended.
Three of my reported issues were fixed and one more is wrongly marked as fixed (https://quality.embarcadero.com/browse/RSP-31137). But I have to agree with @David Heffernan that the list of new features is rather underwhelming, if you are not using C++ Builder. David what do you think of the change related to floating point exceptions?
-
There have been a large number of new features and enhancements implemented in the P4D library recently . This discussion document provides an overview of these developments.
-
5
-
4
-
-
Let's not start language wars in this thread, which is about a significant development in Python 12 and how take advantage of it using P4D. P4D is about combining the strengths of python and Delphi, not choosing one versus the other.
-
1
-
-
2 hours ago, Pat Foley said:Is a 2006 Programming Python by Mark Lutz still worth reading?
Python 3 was released in 2008. I would read something more recent that is based on Python 3.
pamoroso/free-python-books: Python books free to read online or download (github.com)
-
1
-
-
There have been a lot of questions in this forum about running python code in threads using Python4Delphi. I have created a comprehensive guide in this Wiki topic.
-
3
-
-
2 hours ago, mbaghb said:The point that I noticed is the large size of the DLL file,
I have no idea why and how you are building a DLL, but from the size I can tell that you are pulling in a large chank of the Delphi RTL.
2 hours ago, mbaghb said:And another point, is there a complete document of all functions, methods, etc. for P4D that I can download?
Not except the source code.
-
1
-
-
In case you have not heard, Python 12 made a breakthrough towards running threads in parallel. For now, the feature is only available through the C-API and there are limitations. But still, the performance boost that comes from the exploitation of multiple cores makes this feature very desirable. P4D makes this feature very easily accessible by adding a new execution mode to TPythonThread. There is also a new demo (Demo 36) that shows how to run threads in parallel. If you are wondering about the performance boost, see the results below:
Classic Subinterpreters: prime count 78498 prime count 78498 prime count 78498 prime count 78498 prime count 78498 Elapsed ms: 13695 Subinterpreters with own GIL: prime count 78498 prime count 78498 prime count 78498 prime count 78498 prime count 78498 Elapsed ms: 3482
You can find more details in this P4D announcement.
-
@dnbif72 Support for the buffer protocol was added to P4D.
A new demo (Demo35) shows how to access (read and write) numpy arrays super fast using the buffer protocol.
-
19 minutes ago, Uwe Raabe said:Seems not to be a valid solution to avoid the leak.
You are right. I have removed the code from the post, so as not to confuse people. The code at the first post works well.
-
3 hours ago, pyscripter said:Any idea why the compiler does not free TerminateProc on its own? Is this a compiler bug?
Answer myself. I remember having seen these some time ago, when I have been bitten by this again:
delphi - Memory leaks happens in nested anonymous method - Stack Overflow
TURBU Tech » Blog Archive » How to leak a class you never defined (turbu-rpg.com) (see Barry Kelly's comment).
-
1
-
-
This is a simplified version of what I had in my app.
procedure Test(); var TerminateProc: TThreadProcedure; S: string; begin S := 'Terminated'; TerminateProc := procedure begin ShowMessage(S); end; TThread.CreateAnonymousThread( procedure begin // Do stuff TThread.Queue(nil, TerminateProc); TerminateProc := nil; // Memory leak without this end).Start; end;
I had to insert the statement with the comment "Memory leak without this" to avoid memory leaks. Any idea why the compiler does not free TerminateProc on its own? Is this a compiler bug?
-
1 hour ago, mbaghb said:ow to import its once when initalizing pythonengin and pythonmodule. that is very important for increase performance to get function result.
Importing a module for second, third.. time has no significant performance cost.
-
1
-
-
-
51 minutes ago, dnbif72 said:Well somewhere along the line I must of thought I was getting an address to the pointer to the memory block that held the data, and that it would magically cast to what I wanted! I can see now, that should be a Py_buffer object, which does have the void* buffer at the beginning of the structure so that's why I was seeing and able to copy the data, but I guess it (and or the associated PyObject) needs to be released. I can copy the structure and likely get that to work, but I would still need to replicate the Py_Buffer_Release() routine. Unless your seeing something else I am missing here?
Your code leads to memory corruption. PyArg_ParseTuple(args,"y*",&data); will copy the Py_Buffer structure to the address of data overwriting whatever was after that.
If you wait for a few days, I will add the Py_Buffer stuff to P4D and provide an example of getting raw access to nympy.ndarray data.
Looking forward to receiving C++ Builder installation instructions!
-
@dnbif72By the way, since I am not using C++ Builder, I am looking for someone to provide detailed instructions for installing P4D in C++ Builder. The instructions provide David Intersimone are outdated. See for example: No Python_D.dproj project file inside python4delphi-master\Packages\Delphi\Delphi 10.4+. · Issue #416 · pyscripter/python4delphi (github.com)
Could you please help?
-
8 hours ago, dnbif72 said:double * data;
int ret = eng->PyArg_ParseTuple(args,"y*",&data);
What do you expect to be passed to data?
Please see the docs: Parsing arguments and building values — Python 3.12.0 documentation
"y*" is one of the most esoteric formats. This is the correct way of using it by Victor Stinner one of the python gurus (from this web page).
static PyObject * getargs_y_star(PyObject *self, PyObject *args) { Py_buffer buffer; PyObject *bytes; if (!PyArg_ParseTuple(args, "y*", &buffer)) return NULL; bytes = PyBytes_FromStringAndSize(buffer.buf, buffer.len); PyBuffer_Release(&buffer); return bytes; }
Note that the Py_buffer structure and related functions are not yet defined in P4D, so you will have to get it from the python headers.
-
20 minutes ago, JonRobertson said:I just installed Phython4Delphi.
Did you install the master branch from pyscripter/python4delphi: Free components that wrap up Python into Delphi and Lazarus (FPC) (github.com)?
Here Demo01 and other demos run fine.
-
You may want to give pyscripter/Ssh-Pascal: Delphi ssh library wrapping libssh2 (github.com) a try. It is a wrapper around libssh2, includes scp, sftp, ssh support. Very fast.
-
2
-
-
Use
TThread.ForceQueue
from inside the OnShow handler.
TThread.ForceQueue accepts an optional delay.
-
1
-
-
Never mind. I forgot the answer to an older question.
No rtti is generated for class fields and properties, which is a shame. It does for class methods though.
-
TTest = class A: string; class var B: string; end;
Is it possible to tell that B is a class field using Rtti? Ditto for properties.
And if you get a chance have a look at my other Rtti question.
-
12 minutes ago, Attila Kovacs said:The overloaded methods will be listed one by one
But so do overwritten methods, virtual methods etc.
-
As per title.
For instance:
A) Second method hides the first
ClassA = class procedure Test(I: Integer); end; ClassB = class(classA) procedure Test(S: string); end;
B) Second method overloads the first
ClassA = class procedure Test(I: Integer); overload; end; ClassB = class(classA) procedure Test(S: string); overload; end;
How can you tell the difference with Rtti. GetMethods would show both methods in a similar way.
Delphi 12 is available
in Delphi IDE and APIs
Posted · Edited by pyscripter
Like most new features and bug fixes, this introduces new bugs:
https://quality.embarcadero.com/browse/RSP-43261
https://quality.embarcadero.com/browse/RSP-43263
Update I found a third even more serious issue related to the changes introduced for font scaling:
https://quality.embarcadero.com/browse/RSP-43270