gunicorn部署django,开启多个进程,重复初始化任务,造成Kafka数据被重复消费
在使用gunicorn部署django过程中,发现gunicorn在开多个进程的同时,也会将我的定义的初始化任务在各个进程开启一次# 开启了四个进程gunicorn --chdir projectpath projectname.wsgi:application -b 0.0.0.0:8020 -w 4那么涉及到消费kakfa这种任务,就出现了问题,我既要多个进程接收http上报数据,又要kafk
·
在使用gunicorn部署django过程中,发现gunicorn在开多个进程的同时,也会将我的定义的初始化任务在各个进程开启一次
# 开启了四个进程
gunicorn --chdir projectpath projectname.wsgi:application -b 0.0.0.0:8020 -w 4
那么涉及到消费kakfa这种任务,就出现了问题,我既要多个进程接收http上报数据,又要kafka只在一个进程中被消费,就需要借助文本锁
具体使用方法如下:
import fcntl
import atexit
def init_tasks():
'''我们只想要在一个进程中运行的任务'''
f = open("scheduler.lock", "wb")
def unlock():
fcntl.flock(f, fcntl.LOCK_UN)
f.close()
# 注册非阻塞互斥锁
atexit.register(unlock)
def init_ok():
''' 这里可以写可以让多个进程都执行的任务'''
# 为唯一任务加上文本锁,第一个进程初始化后会占用锁,其他进程执行时就无法操作锁,从而无法执行任务
try:
fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB)
init_tasks()
except:
pass
pass
init_ok()
更多推荐
已为社区贡献2条内容
所有评论(0)