从主web服务器卸载任务的简单django应用程序
django-leek的Python项目详细描述
django韭菜
在django中运行异步任务的简单的和灵活的方法。
- Django友好型API
- 易于启动和停止
基于django队列 为什么?
健康的蔬菜搭配,比如芹菜和胡萝卜,能带来什么?
迄今为止最"轻量级"的库的第一步是"安装redis"。尽管redis是一个很棒的软件,但有时你只需要一种简单的方法来卸载web服务器并异步运行任务,比如发送电子邮件。
在这里,django leek
来拯救我们。使用和结构再简单不过了,而且运动部件如此之少,它应该非常稳定,尽管它还没有像芹菜那样经过实战测试。
使用django leek,您可以快速启动并运行更复杂的分布式队列,直到网站有大量流量,并且确实需要可伸缩性。
开始
用pip安装django leek
$ pip install django-leek
在
settings.py
文件中添加django leek
到已安装的应用程序中。
创建所需的表
$ manange.py migrate
确保django leek服务器正在运行。
$ python manage.py runleek
发疯
leek=Leek()@leek.taskdefsend_mail(to):do_what_ever()send_mail.offload(to='foobar@example.com')
您也可以使用
django queue中的"old"(旧)队列
push_task_to_queue(send_mail,to='foobar@example.com')
很容易对生产中卸载到leek服务器的代码进行单元测试。
def_invoke(a_callable,*args,**kwargs):
< > >- 可呼叫(*args,**kwargs) @补丁('django_leek.api.push_task_to_queue',u invoke) def test_mytest(): send_mail.offload(to='sync@leek.com')现在与普通函数一样同步运行 '
/manage.sh测试应用程序运行服务器
-启动测试应用程序/manage.sh测试应用程序leek
-启动测试应用程序的leek实例/manage.sh django_leek测试
-运行测试套件。 < > >- 监听TCP套接字的Python SocketServer。
- 工作线程。
- python队列 < > >
- 当
socketserver
启动时,它初始化worker
线程。 socketserver
监听请求。- 当
socketserver
接收到一个请求(带有args和kwargs的可调用函数)时,它会将请求放到python队列中。
工作线程从
队列中选择任务
< > >工作线程运行任务。
这个队列可以扩展到生产吗?
取决于流量:socketserver很简单,但是很稳定,而且随着站点获得更多流量,可以将django队列服务器移动到另一台计算机、单独的数据库等。在某个时候,可能最好选择芹菜。在此之前,django leek是一种简单、固体且无需催促的解决方案。
设置
要更改默认的django队列设置,请将
leek
dictionary添加到项目mainsettings.py
文件中。这是字典和默认值:
LEEK = { 'bind': "localhost:8002", 'host': "localhost", 'port': 8002}
绑定
韭菜服务器将绑定在这里。主机
当通知leek作业时,django服务器将连接到此主机。端口
当通知leek作业时,django服务器将连接到此端口。持久性
使用以下型号。
队列任务
模型保存推送到队列的所有任务。
任务被pickle为一个tasks\u queue.tasks.task
对象,它是一个简单的类,具有可调用的
、参数
和kwargs
属性,以及一个方法:run()
成功的任务
工作线程将成功执行的每个任务的任务id
保存到该模型中。任务ID是任务的队列任务ID。失败的任务
在工作进程尝试运行任务,但引发异常失败后,工作进程将其保存到该模型中。失败的tak通过任务id
保存,并显示异常消息。只保存上次运行的异常。清除任务
根据您的项目需要,您可以清除工作人员成功完成的任务。
删除这些任务的SQL:
DELETE queued,success FROM tasks_queue_queuedtasks queued INNER JOIN tasks_queue_successtasks success ON success.task_id = queued.id;
以类似的方式,删除失败的任务。 您可以运行cron脚本或其他脚本来清除任务。
发布新版本
签出主分支
确保虚拟环境已激活。
源venv/bin/activate
确保
setup.py中的版本正确。
grep version setup.py
确保安装工具、捆绳和车轮均已安装且为最新版本
pip install "setuptools>=38.6.0" "twine>=1.11.0" "wheel>=0.31.0"
清除所有旧的dist包。
rm-r dist/
建立源和车轮距离。
python setup.py sdist bdist_wheel
上载到PYPI
捆绳上载dist/*
- 利润! < > >
作者
Aviah、Silvia Scalisi和Samuel Carlsson
有关完整列表,请参见贡献者。
推荐PyPI第三方库
开发
在django leek上开发时,可以使用一个测试应用程序。例子:
技术概述
简而言之,python socketserver在后台运行,监听tcp套接字。socketserver从其套接字获取运行任务的请求,并将该任务置于队列中。工作线程从该队列中选取任务,并逐个运行这些任务。
部件
工作流程
运行异步任务的工作流: