我试图将多处理功能集成到一个项目中,但我无法让它工作。 这就是我所拥有的:
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')
因此创建流程存在问题。 有什么想法吗?
答案 0 :(得分:2)
缩进最后的
while 1:
print('hey')
使其成为if
- 块
在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')
答案 1 :(得分: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()