如何在python中同时运行两个同步进程
让两个进程function1、function2同时运行。 函数1//连续追加列表 function2//从function1获取列表,从列表中获取所有数据并复制到另一个列表,刷新原始列表并处理复制的列表如何在python中同时运行两个同步进程,python,multithreading,multiprocessing,python-multiprocessing,python-multithreading,Python,Multithreading,Multiprocessing,Python Multiprocessing,Python Multithreading,让两个进程function1、function2同时运行。 函数1//连续追加列表 function2//从function1获取列表,从列表中获取所有数据并复制到另一个列表,刷新原始列表并处理复制的列表 sample code: list_p =[] def function1(data): list_p.append(data) def function2(list_p): list_q = list_p.copy() list_p.flush()
sample code:
list_p =[]
def function1(data):
list_p.append(data)
def function2(list_p):
list_q = list_p.copy()
list_p.flush()
x= process(list_q)
return x
while True:
//coming data continously
function1(coming data)
因此,如何同时使用function1和function2,以便我可以从function1获取数据并刷新它(刷新后,开始从0向function1中追加索引),同时列表可以追加到function1中
同时,function1可以追加列表,function2可以处理新列表,在完成function2的处理后,它再次获取function2处理时追加的原始列表中的所有数据
继续 下面是一个使用
线程的示例。我在producer中使用了input
函数来代替数据流。(这是基于。)
请阅读Python GIL。Python可能不是完成此任务的最佳语言。如果您必须使用Python,可能不在线程中执行、在循环中执行或在函数之间使用持久存储。您可以使用队列类,它支持多线程:如果您不使用队列或任何其他同步机制,您还可以在google上搜索“生产者-消费者问题”,那么您的代码将始终使用100%的CPU,即使列表为空,as函数2也会持续执行。对于队列,函数2将一直处于休眠状态,直到真正有数据要处理为止。正如@Alex所提到的:使用的性能智能多线程可能不一定会提高您的性能,但这取决于传入数据来自何处以及调用的函数process()
。下面是一个线程类示例:@Alex您能解释或共享与“函数之间的持久存储”相关的任何链接吗“非常感谢你,@marke;这真的很有帮助。你救了我一天:P
from threading import Thread
from queue import Queue
q = Queue()
final_results = []
def producer():
while True:
i = int(input('Give me some number: ')) # here you should get data from data stream
q.put(i)
def consumer():
while True:
number = q.get()
result = number**2
final_results.append(result)
print(final_results)
q.task_done()
t = Thread(target=consumer)
t.daemon = True
t.start()
producer()