[英]Python / Tracing - How to stop a function's execution (return from it ) from within a tracer
[英]How to execute a Python function within a function and not stop the execution
我试图在不使用线程的情况下完成某些事情
我想在函数中执行一个函数,但我不希望第一个函数的流程停止。 它只是一个程序,我不期望任何返回,我也需要这个来保持执行由于某些原因。
这是我想要做的代码片段代码:
function foo():
a = 5
dosomething()
# I dont wan't to wait until dosomething finish. Just call and follow it
return a
有没有办法做到这一点?
提前致谢。
您可以使用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是同步的,你必须使用异步处理来实现这一点。
虽然有许多方法可以异步执行函数,但一种方法是使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.