Python Forum
MultiThreading - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Forum & Off Topic (https://python-forum.io/forum-23.html)
+--- Forum: Bar (https://python-forum.io/forum-27.html)
+--- Thread: MultiThreading (/thread-38664.html)



MultiThreading - DPaul - Nov-10-2022

Hi,
Not a showstopper or a bug, just a nice to have:
I basically use the multithreading code, proposed by Wavic:

images = pathlib.Path('path_to_folder').glob('**/*.tif') # recusively. returns a generator
with concurrent.futures.ThreadPoolExecutor() as executor:
    _ = executor.map(worker, images)
Before that, Ii did it old_school, by reading the 'images" sequentially in a "for loop".
Obvioulsly very much slower.
BUT: by inserting a counter inside the for loop, i could monitor it's progress (500 done, 1000 done, 1500 done...etc.
You can't insert a counter in the "worker" function, because printing is erratic,
and how would a multiThreading count work.? Via a global variable ? = one big mess.
Although I hinted to this problem in another post, nobody seems to know.
So my definitive question: how does one monitor the "progress" of aThreadPool, given
that "images" are scans that need to be processed.
If a user starts a batch of 3000, does he/she have the time to go and get a coffee, before the batch is finished?
If it is not possible, OK with me. Plan B.
Paul


RE: MultiThreading - DPaul - Nov-10-2022

OK, don't bother, i found that it is possible, but hardly kiss:
"... This can be achieved by issuing tasks asynchronously to the ThreadPool,
such as via the apply_async() function
and specifying a callback function via the “callback” argument...."


Unless there is a kiss solution, that I am not aware of,...
Plan B is to do some tests for each type of document, calculate the average
processing time (pro rata) for a batch of 10, and predict the endtime.
Won't be a minute wrong. Smile
Paul