异步运行某些Python代码的正确方法是什么?

2024-10-01 11:26:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从我的普通Flask应用程序发送邮件,所以我认为最简单的方法是使用smtplib发送邮件。但我必须异步地做这件事-你不能只在请求中插入3秒的延迟-对吗?因此,我将电子邮件添加到队列(psql表),并从另一个读取该表并使用smptlib的程序发送它。在

第二个程序(maildack)作为一个独立的进程运行,在一个独立的upstart服务中。在

现在我需要另一个小的异步服务,我在想我是应该写另一个python脚本(第三个,计算我的Flask应用程序和mailtack),还是应该使用python的“多进程”甚至“线程”重写第二个程序?在

(当我在Clojure中编程时,我可以很容易地用“futures”在单独的线程中运行代码,所以通常我会这样做。)


Tags: 方法程序脚本应用程序flask队列进程电子邮件
2条回答

您应该考虑使用Celery。它在异步处理的web框架中得到了广泛的应用,并支持许多不同的后端,如AMQP、数据库等

试试Gevent
Greenlet任务可以为您创建br/> 这个绿色小菜是green thread。在

from gevent import monkey
monkey.patch_all()
import gevent
from gevent import Greenlet

class Task(Greenlet):
    def __init__(self, name):
        Greenlet.__init__(self)
        self.name = name    
    def _run(self):
        print "Task %s: some task..." % self.name

t1 = Task("long task")
t1.start()
# here we are waiting task
gevent.joinall([t1])

也可以将Gevent用作烧瓶的server

^{pr2}$

相关问题 更多 >