什么是异步运行一些Python代码的正确方法?
问题描述:
我需要从我的普通Flask应用程序发送邮件,所以我认为最简单的方法是使用smtplib发送邮件。但我必须异步执行 - 您不能只在请求中插入3秒的延迟 - 对吗?因此,我将电子邮件添加到队列(psql表)中,并从另一个读取此表并使用smptlib的程序发送它。什么是异步运行一些Python代码的正确方法?
第二个程序(maildonkey)作为一个独立的进程在独立的新贵服务中运行。
现在我需要另一个小的异步服务,我想如果我应该写另一个python脚本(第三,计算我的Flask应用程序和'maildonkey')还是应该使用像Python的'多进程'之类的东西,甚至'线程'并重写第二个程序?
(当我用Clojure是编程,我可以很容易地运行与“期货”一个单独的线程代码,所以通常我会做到这一点。)
答
尝试Gevent。
您可以为您的长时间任务创建Greenlet对象。
这个greenlet是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对瓶:
from gevent.wsgi import WSGIServer
from yourapplication import app
http_server = WSGIServer(('', 5000), app)
http_server.serve_forever()
是大胆的必要吗? – Blender 2012-04-04 01:51:44