[英]Multiprocessing function not calling Python 3
这是我的代码:
from multiprocessing import Process, Manager, Value
from ctypes import c_char_p
def greet(string):
print('bob')
string.value = '1'
for i in range(100):
string.value = str(i)
if __name__ == '__main__':
manager = Manager()
string = manager.Value(c_char_p, "Hello")
process = Process(target=greet, args=(string,))
process.start()
for j in range(100):
print(string.value)
process.join()
input()
现在我希望代码打印如下内容:
Hello
1
1
1
4
4
5
5
6
7
因为,当然,我知道两个循环都可能会运行并且速度不同。 但是所有打印的代码都是一个Hello
,一百次,它甚至在代码结束并且我调用process.join()
之前都不会打印bob
。 就像在我调用process.join()
之前, greet
不会运行。 我已经阅读了Python multiprocessing not called function ,并且我正在从命令行运行代码。 它仍然不起作用
首先,如果有人能告诉我为什么只在最后调用该函数,以及如何修复它,我会很高兴。 如果可以修复,父进程和子进程是否仍然可以读取string
?
提前致谢!
你的代码没问题。 我认为这真的只是您特定机器上的计时问题。 当我运行你的代码时,我可以看到 ca。 70x“你好”,然后是数字。 所以我开始插入sleep()
,看看会发生什么真的很有趣:
from multiprocessing import Process, Manager, Value
from ctypes import c_char_p
import time
def greet(string):
print('bob')
string.value = '1'
for i in range(100):
string.value = str(i)
time.sleep(0.1)
if __name__ == '__main__':
manager = Manager()
string = manager.Value(c_char_p, "Hello")
process = Process(target=greet, args=(string,))
process.start()
time.sleep(0.5)
for j in range(100):
print(string.value)
time.sleep(0.2)
process.join()
input()
在我的机器上,我现在得到:
bob
4
6
8
10
...
没有“hello”,因为__main__
的sleep(0.5)
几乎可以保证比新分叉的“greet”进程慢,所以当最后执行第一个print(string.value)
,“hello”早已被覆盖。
您的代码很好,但是您对程序的哪一部分需要多长时间的假设是错误的(至少对于您的机器而言)。 玩一下睡眠。 这是非常有指导意义的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.