python queue死锁_python的queue模块会不会被锁死

我把抓取的数据通过rpc发送给调度里面的queue,调度里面的有几个线程消费该queue,

刚开始还可以,几个小时后就卡死了,发送给rpc的进程也卡住了,不抓数据了,而queue是满的,却不消费

rpc.py

import rpyc

from scheduler import Scheduler

import time

import queue

scheduler = Scheduler()

class Service(rpyc.Service):

def exposed_add_task(self, task):

try:

scheduler.add_task(task)

except queue.Full:

time.sleep(1)

if __name__ == '__main__':

import threading

import rpyc.utils.server

print('scheduler startup')

scheduler.run()

print('rpc server startup')

server = rpyc.utils.server.ThreadedServer(Service, port=50000)

thread = threading.Thread(target=server.start)

thread.start()

try:

thread.join()

except KeyboardInterrupt:

scheduler.stop()

server.close()

print('rpc server shutdown')

scheduler.py

class Scheduler:

def __init__(self, worker_num=8):

self.worker_num = worker_num

self.task_queue = queue.Queue(500)

self._stop = False

def _work(self):

while not self._stop:

try:

print('queue size', self.task_queue.qsize())

typ, *data = self.task_queue.get()

except queue.Empty:

time.sleep(1)

continue

except:

pass

self.task_queue.task_done()

def _init_workers(self):

for _ in range(self.worker_num):

t = threading.Thread(target=self._work)

t.deamon = True

t.start()

def add_task(self, task):

self.task_queue.put(task)

def run(self):

self._init_workers()

def stop(self):

self._stop = True

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值