在 Python 中更正多处理
Correct Multiprocessing in Python
我试图在特定时间之前跟踪用户的决定 - 为此,我要求输入,同时设置计时器。我正在尝试同时使用这两个,以便在有输入查询时计时器会运行。我目前的解决方案不起作用 - 有人可以告诉我我需要做什么才能在这里取得成功吗?
# pft4.py
from multiprocessing import Process
import time
def attack_request():
attack_query = input("Do you want to attack? ")
print(attack_query)
def attack_timer():
timer = 0
for i in range(3):
timer += 1
time.sleep(1)
print("Timer updated: " + str(timer))
return timer
def main():
process_1 = Process(target = attack_request)
process_2 = Process(target = attack_timer)
process_1.run(); process_2.run()
process_1.join(); process_2.join()
# attack_request()
# attack_timer()
if __name__ == "__main__":
main()
您必须呼叫 Process.start()
,而不是 Process.run()
。 run()
只是执行进程的主要功能。它 而不是 将此功能安排在不同的进程中 运行。 start()
正是这样做的。请参阅 Process
class.
的参考文档
在您的代码中,process_1.run()
将执行 attack_request()
并阻塞直到 returns。然后它对 attack_timer()
做同样的事情。如果您使用 start()
代替,那么两者将同时执行。
另见相关 post:
从 stdin
获取输入可能并不简单。像其他人建议的那样,使用线程可能更好。
我试图在特定时间之前跟踪用户的决定 - 为此,我要求输入,同时设置计时器。我正在尝试同时使用这两个,以便在有输入查询时计时器会运行。我目前的解决方案不起作用 - 有人可以告诉我我需要做什么才能在这里取得成功吗?
# pft4.py
from multiprocessing import Process
import time
def attack_request():
attack_query = input("Do you want to attack? ")
print(attack_query)
def attack_timer():
timer = 0
for i in range(3):
timer += 1
time.sleep(1)
print("Timer updated: " + str(timer))
return timer
def main():
process_1 = Process(target = attack_request)
process_2 = Process(target = attack_timer)
process_1.run(); process_2.run()
process_1.join(); process_2.join()
# attack_request()
# attack_timer()
if __name__ == "__main__":
main()
您必须呼叫 Process.start()
,而不是 Process.run()
。 run()
只是执行进程的主要功能。它 而不是 将此功能安排在不同的进程中 运行。 start()
正是这样做的。请参阅 Process
class.
在您的代码中,process_1.run()
将执行 attack_request()
并阻塞直到 returns。然后它对 attack_timer()
做同样的事情。如果您使用 start()
代替,那么两者将同时执行。
另见相关 post:stdin
获取输入可能并不简单。像其他人建议的那样,使用线程可能更好。