让 Python 等待函数完成,然后再继续执行程序
Have Python wait for a function to finish before proceeding with the program
我有一个我写的 python 程序。这个 python 程序调用我也编写的模块中的一个函数,并向它传递一些数据。
程序:
def Response(Response):
Resp = Response
def main():
myModule.process_this("hello") #Send string to myModule Process_this function
#Should wait around here for Resp to contain the Response
print Resp
该函数对其进行处理并将其作为对主程序中 Response 函数的响应传回。
我的模块:
def process_this(data)
#process data
program.Response(data)
我检查过,所有数据都正确传递。我省略了所有导入和数据处理以使这个问题尽可能简洁。
我需要找到一些方法让 Python 在继续执行程序之前等待 resp 实际包含响应。我一直在寻找线程和使用信号量或使用队列模块,但我不是 100% 确定我将如何将它们合并到我的程序中。
这是一个使用队列和线程模块的有效解决方案。注意:如果你的任务是 CPU 绑定而不是 IO 绑定,你应该使用 multiprocessing 而不是
import threading
import Queue
def worker(in_q, out_q):
""" threadsafe worker """
abort = False
while not abort:
try:
# make sure we don't wait forever
task = in_q.get(True, .5)
except Queue.Empty:
abort = True
else:
# process task
response = task
# return result
out_q.put(response)
in_q.task_done()
# one queue to pass tasks, one to get results
task_q = Queue.Queue()
result_q = Queue.Queue()
# start threads
t = threading.Thread(target=worker, args=(task_q, result_q))
t.start()
# submit some work
task_q.put("hello")
# wait for results
task_q.join()
print "result", result_q.get()
我有一个我写的 python 程序。这个 python 程序调用我也编写的模块中的一个函数,并向它传递一些数据。
程序:
def Response(Response):
Resp = Response
def main():
myModule.process_this("hello") #Send string to myModule Process_this function
#Should wait around here for Resp to contain the Response
print Resp
该函数对其进行处理并将其作为对主程序中 Response 函数的响应传回。
我的模块:
def process_this(data)
#process data
program.Response(data)
我检查过,所有数据都正确传递。我省略了所有导入和数据处理以使这个问题尽可能简洁。
我需要找到一些方法让 Python 在继续执行程序之前等待 resp 实际包含响应。我一直在寻找线程和使用信号量或使用队列模块,但我不是 100% 确定我将如何将它们合并到我的程序中。
这是一个使用队列和线程模块的有效解决方案。注意:如果你的任务是 CPU 绑定而不是 IO 绑定,你应该使用 multiprocessing 而不是
import threading
import Queue
def worker(in_q, out_q):
""" threadsafe worker """
abort = False
while not abort:
try:
# make sure we don't wait forever
task = in_q.get(True, .5)
except Queue.Empty:
abort = True
else:
# process task
response = task
# return result
out_q.put(response)
in_q.task_done()
# one queue to pass tasks, one to get results
task_q = Queue.Queue()
result_q = Queue.Queue()
# start threads
t = threading.Thread(target=worker, args=(task_q, result_q))
t.start()
# submit some work
task_q.put("hello")
# wait for results
task_q.join()
print "result", result_q.get()