Terry J. Reedy <[email protected]> added the comment:
Without thread support, event generation from multiple threads fails
immediately. I tried an experiment with callback scheduling. It seems to work
-- almost.
thread_event.py runs on 2.7 with non-t tcl. It modifies TkinterHandlres32.py
by replacing
self.target.event_generate(c)
with
self.target.after(1, lambda t=self.target: t.event_generate(c))
to schedule the event generation in the main thread.
It also imports either tkinter or Tkinter, and runs for 10 seconds
self.root.after(10000,self.stop)
for a more rigorous test.
However, when I add 2 0s to the delay, to make it 1000 seconds, the main thread
and gui crash sometime sooner (100 seconds, say), leaving the worker threads
sending indefinitely. One time there was a traceback:
Traceback (most recent call last):
File "F:\dev\tem\thread_event.py", line 55, in <module>
Main().go()
File "F:\dev\tem\thread_event.py", line 35, in go
self.t_cleanup.join()
AttributeError: 'Main' object has no attribute 't_cleanup'
A second time, nothing appeared.
I suspect that without proper locking an .after call was eventually interrupted
and the pending scheduled callback data structure corrupted. Mainloop exits
without t_cleanup created.
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue33412>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com