Threading plus multiprocessing plus cv2 error

John O'Hagan research at johnohagan.com
Tue Sep 1 04:41:09 EDT 2020


On Sun, 30 Aug 2020 09:59:15 +0100
Barry Scott <barry at barrys-emacs.org> wrote:

> 
> 
> > On 29 Aug 2020, at 18:01, Dennis Lee Bieber <wlfraed at ix.netcom.com>
> > wrote:
> > 
> > On Sat, 29 Aug 2020 18:24:10 +1000, John O'Hagan
> > <research at johnohagan.com> declaimed the following:
> > 
> >> There's no error without the sleep(1), nor if the Process is
> >> started before the Thread, nor if two Processes are used instead,
> >> nor if two Threads are used instead. IOW the error only occurs if
> >> a Thread is started first, and a Process is started a little later.
> >> 
> >> Any ideas what might be causing the error?
> >> 
> > 
> > 	Under Linux, multiprocessing creates processes using
> > fork(). That means that, for some fraction of time, you have TWO
> > processes sharing the same thread and all that entails (if it
> > doesn't overlay the forked process with a new executable, they are
> > sharing the thread until the thread exits).
> 
> In the parent you have 1 or more threads.
> 
> After fork the new process has 1 thread, which is not shared with the
> parent. Any extra threads are not in the new process. But the memory
> in the new process will have data structures from the parents other
> threads.
> 
> So no you never have two processes sharing an threads.
> 
> This leads to problems with locks.
> 
> Barry
> 
> 
> > 
> > https://stackoverflow.com/questions/54466572/how-to-properly-multithread-in-opencv-in-2019
> > (which points to)
> > https://answers.opencv.org/question/32415/thread-safe/?answer=32452#post-id-32452
> > """
> > The library itself is thread safe in that you can have multiple
> > calls into the library at the same time, however the data is not
> > always thread safe. """
> > 
> > 	The sleep(1), when compounded with the overhead of starting
> > the thread, and then starting the process, likely means the thread
> > had exited before the process actually is started. Try replacing
> > the sleep(2) in the work code with something like sleep(30) -- I
> > hypothesize that you'll get the same error condition even with the
> > sleep(1) in place.
> > 
> > 
> > -- 
> > 	Wulfraed                 Dennis Lee Bieber         AF6VN
> > 	wlfraed at ix.netcom.com
> > http://wlfraed.microdiversity.freeddns.org/
> > 
> > -- 
> > https://mail.python.org/mailman/listinfo/python-list
> > 
> 

Thanks to all who replied. I'm still none the wiser about the error, but
I learned something about multiprocessing!

John


More information about the Python-list mailing list