多处理函数未调用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,一百次,它甚至不打印bob,直到代码结束,我调用process.join()。就像greet直到我调用process.join()才运行一样。我已经读过Python多处理不调用函数,并且我正在从命令行运行代码。它仍然不起作用

首先,我希望有人能告诉我为什么函数最终只被调用,以及如何修复它。如果可以修复,string仍然可以被父进程和子进程读取吗?

提前感谢!

您的代码很好。我认为这实际上只是您特定机器的时间问题。当我运行你的代码时,我可以看到大约70倍的"你好",然后是数字。所以我开始插入sleep()s,看看会发生什么真的很有趣:

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)实际上保证比新分叉的"helle"进程慢,所以当最后执行第一个print(string.value)时,"hello"早就被覆盖了。

你的代码很好,但你对程序的哪一部分需要多长时间的假设是错误的(至少对你的机器来说是这样(。玩一会儿睡眠。这很有启发性。

相关内容

  • 没有找到相关文章

最新更新