繁体   English   中英

不调用 Python 3 的多处理函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM