我需要在应用程序的进程中使用input()。我写了一个小测试,因为我遇到了一些问题。你知道吗
from multiprocessing import Process, Queue
class InputCatcher(Process):
def __init__(self, input_queue):
Process.__init__(self)
self.input_queue = input_queue
def run(self):
while True:
self.input_queue.put(input())
input_queue = Queue()
ic = InputCatcher(input_queue)
ic.daemon = True
ic.start()
while True:
if not input_queue.empty():
print(input_queue.get())
不幸的是,我得到了这个错误:
Process InputCatcher-1:
Traceback (most recent call last):
File "/usr/lib/python3.3/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/home/****/PycharmProjects/****/test/inputtestproces.py", line 13, in run
self.input_queue.put(input())
EOFError: EOF when reading a line
有没有办法让它发挥作用?你知道吗
从
multiprocessing
文档(https://docs.python.org/2/library/multiprocessing.html#all-platforms):因此分叉一个进程会关闭该进程的
stdin
,并用/dev/null
的文件描述符替换它。你知道吗在回答您的问题时,解决这个问题的一种方法是反转代码的逻辑,让主进程等待用户输入,而分叉的进程执行主进程的原始任务。你知道吗
另外:从您发布的代码来看,使用
threading
模块可能比使用multiprocessing
模块更好。除非您计划在分叉的进程中做一些计算密集型的工作,multiprocessing
模块有点像过度杀戮。此外,线程间通信通常比进程间通信简单。你知道吗相关问题 更多 >
编程相关推荐