Tim Peters <[email protected]> added the comment:
Weird. If I insert these between the two process starts:
import time
time.sleep(2)
then the producer produces the expected output:
at start: 666
at producer start: 666
and the program blows up instead when it gets to
print("in consumer:", self.val.value)
Same thing if, instead of a sleep, I put
producerprocess.join()
before starting the consumer.
If I change the tail end to:
producerprocess.start()
import time
time.sleep(2)
print(state_value)
consumerprocess = MyConsumer(state_value, state_ready)
consumerprocess.start()
then I see
at start: 666
at producer start: 666
Value('i', 42)
before it blows up in the consumer. So `state_value` appears to survive
intact, and mutated as intended, across the producer's life - but gets
corrupted somehow when it's _also_ passed to the consumer.
Weirder ;-) , if I replace the tail with the ever-more elaborate:
producerprocess = MyProducer(state_value, state_ready)
producerprocess.start()
import time
time.sleep(2)
producerprocess.join()
print(state_value)
state_value.value = 13
producerprocess = MyProducer(state_value, state_ready)
producerprocess.start()
time.sleep(2)
producerprocess.join()
print(state_value)
consumerprocess = MyConsumer(state_value, state_ready)
consumerprocess.start()
then I see
at start: 666
at producer start: 666
Value('i', 42)
at producer start: 13
Value('i', 42)
before it blows up in the consumer - so it survived two full producer
lifetimes! So ... generalize ... change the tail to:
for i in range(10):
state_value.value = i
producerprocess = MyProducer(state_value, state_ready)
producerprocess.start()
producerprocess.join()
print(state_value)
consumerprocess = MyConsumer(state_value, state_ready)
consumerprocess.start()
and I see everything working fine before it blows up in the consumer:
at start: 666
at producer start: 0
Value('i', 42)
at producer start: 1
Value('i', 42)
at producer start: 2
Value('i', 42)
at producer start: 3
Value('i', 42)
at producer start: 4
Value('i', 42)
at producer start: 5
Value('i', 42)
at producer start: 6
Value('i', 42)
at producer start: 7
Value('i', 42)
at producer start: 8
Value('i', 42)
at producer start: 9
Value('i', 42)
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue41660>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com