Hug*_*ugo 11 python upstart flask
我需要从我的普通Flask应用程序发送邮件,所以我认为最简单的方法是使用smtplib发送它.但我不得不异步地做 - 你不能在请求中插入3秒的延迟 - 对吗?所以我将电子邮件添加到队列(psql表),并从另一个读取此表的程序发送它并使用smptlib.
第二个程序(maildonkey)作为一个独立的进程在一个独立的upstart服务中运行.
现在我需要另一个那些小的异步服务,我在想是否应该编写另一个python脚本(第三,计算我的Flask应用程序和'maildonkey')或者我应该使用类似Python的'multiprocess',甚至是'线程'并重写第二个程序?
(当我在Clojure中编程时,我可以轻松地在带有'future'的单独线程中运行代码,所以通常我会这样做.)
Sta*_*tan 10
试试Gevent.
您可以为长期任务创建Greenlet对象.
这个greenlet是绿线.
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])
Run Code Online (Sandbox Code Playgroud)
您也可以使用Gevent作为Flask 的服务器:
from gevent.wsgi import WSGIServer
from yourapplication import app
http_server = WSGIServer(('', 5000), app)
http_server.serve_forever()
Run Code Online (Sandbox Code Playgroud)