Python 获取用户输入并通过队列传递到新进程
简而言之,我试图运行一个带有变量的函数(循环),比如“val”,以及另一个获取用户输入“val”的函数。用户将输入一个初始值,但随后可以更改该值,循环将不间断地运行并采用这个新值“val” 我知道我需要使用多处理、队列和stdin,如下所示:。虽然我似乎无法让进程运行。我在每个部分都找到了有效的例子,但我无法将它们结合在一起发挥作用Python 获取用户输入并通过队列传递到新进程,python,queue,multiprocessing,Python,Queue,Multiprocessing,简而言之,我试图运行一个带有变量的函数(循环),比如“val”,以及另一个获取用户输入“val”的函数。用户将输入一个初始值,但随后可以更改该值,循环将不间断地运行并采用这个新值“val” 我知道我需要使用多处理、队列和stdin,如下所示:。虽然我似乎无法让进程运行。我在每个部分都找到了有效的例子,但我无法将它们结合在一起发挥作用 from multiprocessing import Process, Queue import time import sys import os def r
from multiprocessing import Process, Queue
import time
import sys
import os
def reader(q):
while True:
#do some stuff
if q.empty() == False: #Code gets hung here
msg = q.get(block = False) #These few lines will change
if (msg == 10): #Not sure of syntax with this so going basic
print('Value:'+str(msg))
break
if __name__=='__main__':
q = Queue()
reader_p = Process(target=reader, args=((q),))
reader_p.daemon = True
reader_p.start()
while True:
msg = input("Enter: ")
q.put(msg)
reader_p.join()
*注意:我使用q.get()!=false:
但仍然不确定语法
问题似乎出现在q.get()
程序到达q.get(block=False)
时,即程序停止并向我发出队列。empty
错误。
通过我的编辑,代码现在被挂起。如果去掉这一点,就会出现上述错误
Python不是我最好的语言,我也不熟悉队列,所以我对它不是很了解,所以我希望您能修复我的语法错误,或者指出我是否使用了不正确的函数
编辑:根据最初的措辞,有人提到线程可能是最好的选择。但我要说的是,我使用的实际代码使用2+循环(目前),需要在单个变量上运行
Psudo Code:
process 1:
get input
infinte loop:
do something with input variable
#this is on a rasp pi and is just going to output onto display
#it needs to run on infinite loop till program is killed
precess 2:
check for new input
new input is different than last/first input?
send input to process #1
当然,我不知道您的用例,但正如问题所述,我想说,听起来您需要的是不同的线程,而不是不同的进程。@JohanL我知道我的措辞可能不清楚,我为使用不清楚的示例代码表示歉意。但除非我弄错了,否则我确实需要进程,因为我只希望在某个实例上传递新变量。除此之外,还将使用2个以上的进程(或线程)。如果这可以与踏板这将是一个对我的一部分网站,我将享受帮助,如何使这与踏板发生!这些进程不会在同一硬件上运行吗?或者两者都在同一个Raspberry Pi上运行?它们将在同一个RPi上运行,一个脚本。您是否有连接的键盘,或者如何提供输入?如果只有一个进程处理用户输入,那么最好让它成为主进程,然后在其他进程中处理计算,因为主进程自动拥有stdin和stdout。