0

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

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')

但如果我运行它,我只会听到一声哔哔声,我希望它重复。我该怎么做?

好的计划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')

所以这个过程的创建有问题。有任何想法吗?

4

2 回答 2

2

最后缩进

while 1:
    print('hey')

使其成为if-block的一部分

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

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

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')
于 2013-08-07T12:48:36.373 回答
0

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

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()
于 2013-08-07T13:25:51.910 回答