我试图在不使用线程
的情况下完成我想在函数中执行函数,但我不希望第一个函数的流程停止。它只是一个程序,我不期待任何回报,我也需要这个来保持执行的原因。
以下是我想要做的代码片段:
function foo():
a = 5
dosomething()
# I dont wan't to wait until dosomething finish. Just call and follow it
return a
有没有办法做到这一点?
提前致谢。
答案 0 :(得分:2)
您可以使用https://docs.python.org/3/library/concurrent.futures.html来实现“即发即弃”行为。
import concurrent.futures
def foo():
a = 5
with ThreadPoolExecutor(max_workers=1) as executor:
future = executor.submit(dosomething)
future.add_done_callback(on_something_done)
#print(future.result())
#continue without waiting dosomething()
#future.cancel() #To cancel dosomething
#future.done() #return True if done.
return a
def on_something_done(future):
print(future.result())
concurrent.futures 是内置的,因为python 3
对于Python 2.x ,您可以下载futures 2.1.6 here
答案 1 :(得分:1)
Python是同步的,你必须使用异步处理来实现这一点。
虽然有许多方法可以异步执行函数,但一种方法是使用python-rq。 Python-rq允许您将作业排队以便在后台与工作人员进行处理。它由Redis提供支持,旨在降低进入门槛。它应该很容易集成到您的Web堆栈中。
例如:
from rq import Queue, use_connection
def foo():
use_connection()
q = Queue()
# do some things
a = 5
# now process something else asynchronously
q.enqueue(do_something)
# do more here
return a