TypeError: can‘t pickle _thread.lock objects

前提: Django / django_apscheduler / django_redis

当使用 add_job的时候scheduler.add_job(SelfApscheduler().utils, "interval", seconds=group_port_scan, args=[], id="port_scan_data", replace_existing=True, misfire_grace_time=10),

报错TypeError: can’t pickle _thread.lock objects

x

原因: 任务中将 redis_conn = get_redis_conn() 当做了 类变量self.redis_conn 例如:

class SelfApscheduler():

	def __init__(self):
	    self.redis_conn = get_redis_conn()
	    self.redis_conn_event = get_redis_conn("event")
	   
	def utils1(self):
	    self.redis_conn.set("name", "小小")
	
	def utils2(self):
	    self.redis_conn_event.set("age", 20)
	
	def util(self):
	     self.utils1()
	     self.utils2()

报错: TypeError: can't pickle _thread.lock objects

原因:get_redis_conn 方法被当做类变量时,启用了多线程, 而 add_job时是开启了一个线程,执行该任务时只允许一个线程,

解决方式:

class SelfApscheduler():
	def __init__(self):
	    pass
	   
	def utils(self):
	    redis_conn = get_redis_conn()
	    redis_conn.set("name", "小小")
	
	def utils2(self):
	    redis_conn_event = get_redis_conn()
	    redis_conn_event.set("age", 20)
	
	def util(self):
	     self.utils1()
	     self.utils2()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值