如何在函数内执行Python函数而不是停止执行

时间:2014-09-19 03:11:03

标签: python function

我试图在不使用线程

的情况下完成

我想在函数中执行函数,但我不希望第一个函数的流程停止。它只是一个程序,我不期待任何回报,我也需要这个来保持执行的原因。

以下是我想要做的代码片段:

function foo():

    a = 5

    dosomething() 
    # I dont wan't to wait until dosomething finish. Just call and follow it

    return a

有没有办法做到这一点?

提前致谢。

2 个答案:

答案 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