<p>好吧,虽然你的方法不正确,但基本上它可能会导致你的程序没有可用的线程。如<a href="https://stackoverflow.com/users/501979/ali-nikneshan">Ali</a>所述,一般的方法是使用像<code>RQ</code>或<code>Celery</code>这样的作业队列。但是,您不需要提取函数来使用这些库。对于烧瓶,我建议您使用<a href="https://github.com/mattupstate/flask-rq" rel="nofollow noreferrer">Flask-RQ</a>。一开始很简单:</p>
<h2>RQ公司</h2>
<pre><code>pip install flask-rq
</code></pre>
<p>记住在你的Flask应用中使用Redis之前先安装它。</p>
<p>只需在烧瓶函数中使用@Job Decorator:</p>
<pre><code>from flask.ext.rq import job
@job
def process(i):
# Long stuff to process
process.delay(3)
</code></pre>
<p>最后,您需要<code>rqworker</code>来启动工作进程:</p>
<blockquote>
<p>rqworker</p>
</blockquote>
<p>有关详细信息,请参见<a href="http://python-rq.org/" rel="nofollow noreferrer">RQ docs</a>。为简单的长时间运行过程而设计的RQ。</p>
<h2>芹菜</h2>
<p>芹菜更复杂,有大量的功能列表,如果您是新的作业队列和分布式处理方法,则不推荐使用芹菜。</p>
<h2>绿叶</h2>
<p>绿叶有开关。让您在长时间运行的进程之间切换。
您可以使用greenlet来运行进程。这样做的好处是,您不需要Redis和其他worker,而是必须重新设计功能,使其兼容:</p>
<pre><code>from greenlet import greenlet
def test1():
print 12
gr2.switch()
print 34
def test2():
print 56
gr1.switch()
print 78
gr1 = greenlet(test1)
gr2 = greenlet(test2)
gr1.switch()
</code></pre>