繁体   English   中英

Python多处理过早关闭

[英]Python multiprocessing closes too early

我正在尝试将多处理集成到一个项目中,但我无法让它工作。 这就是我所拥有的:

import time
import winsound
from multiprocessing import Process
winsound.MessageBeep()
def pr1():
    while 1:
        winsound.MessageBeep()
        time.sleep(0.5)
if __name__ == '__main__':
    p = Process(target=pr1, args=())
    p.start()
    p.join()

while 1:
    print('hey')

但如果我跑它,我只听到一声嘟嘟声,我希望它重复一遍。 我怎么做到这一点?

oke plan b,我现在有了这个,我只是得到了正确的答案:

import time
import winsound
from multiprocessing import Process
def pr1():
    while 1:
        winsound.MessageBeep()
        print('its working') 
        time.sleep(0.5)
if __name__ == '__main__':
    print('correct')
    p = Process(target=pr1, args=())
    p.start()
    p.join()

while 1:
    print('hey')

因此,创建流程存在问题。 有任何想法吗?

缩进决赛

while 1:
    print('hey')

使其成为if block的一部分

在Windows下启动子进程时,首先执行模块内容,然后运行给定的可调用target 因为模块永远不会完成执行,所以不会发生这种情况。

然后整个第二个片段变为:

import time
import winsound
from multiprocessing import Process
def pr1():
    while 1:
        winsound.MessageBeep()
        print('its working') 
        time.sleep(0.5)
if __name__ == '__main__':
    print('correct')
    p = Process(target=pr1, args=())
    p.start()
    p.join()

    while 1:
        print('hey')

要显示“其工作”消息,您需要刷新缓冲区,因为通常在进程中输出通常是缓冲的。

import time
import winsound
from multiprocessing import Process
import sys
def pr1():
    while 1:
        winsound.MessageBeep()
        print('its working')
        time.sleep(0.5)
        sys.stdout.flush()
if __name__ == '__main__':
    print('correct')
    p = Process(target=pr1, args=())
    p.start()
    p.join()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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