python多线程为什么要用队列_在python中正确使用多线程队列?

我尝试使用python中的队列,它将是多线程的。我只想知道我使用的方法是正确的还是错误的。如果我在做一些多余的事情,或者有更好的方法可以使用。在

我试图从表中获取新的请求,并使用一些逻辑来调度它们,以执行一些操作,比如运行查询。在

所以在这里,我从主线程为队列生成一个单独的线程。在if __name__=='__main__':

request_queue = SetQueue(maxsize=-1)

worker = Thread(target=request_queue.process_queue)

worker.setDaemon(True)

worker.start()

while True:

try:

#Connect to the database get all the new requests to be verified

db = Database(username_testschema, password_testschema, mother_host_testschema, mother_port_testschema, mother_sid_testschema, 0)

#Get new requests for verification

verify_these = db.query("SELECT JOB_ID FROM %s.table WHERE JOB_STATUS='%s' ORDER BY JOB_ID" %

(username_testschema, 'INITIATED'))

#If there are some requests to be verified, put them in the queue.

if len(verify_these) > 0:

for row in verify_these:

print "verifying : %s" % row[0]

verify_id = row[0]

request_queue.put(verify_id)

except Exception as e:

logger.exception(e)

finally:

time.sleep(10)

现在在Setqueue类中,我有一个process_queue函数,用于处理添加到队列的每次运行中前2个请求。在

^{pr2}$

我想看看我的理解是否正确,是否有任何问题。在

因此,在main func中为True时运行的主线程将获取新请求并将其放入队列中。队列的工作线程(守护进程)继续从队列获取新请求,并派生执行处理的非守护进程线程,由于加入超时为1,工作线程将继续接收新请求而不会被阻塞,其子线程将继续在后台处理。对的?在

因此,如果主进程退出,它们在完成工作之前不会被杀死,但是工作守护进程线程会退出。

怀疑:如果父进程是守护进程,子进程是非后台进程,如果父进程退出,子进程是否退出?)。在

作者:davidbeazley在《将池用作线程协处理器》一节中试图解决类似的问题。所以我应该遵循他的步骤:-

1创建一个进程池。

2像我为request_queue打开一个线程

三。在那条线里def process_verification_queue(self):

while True:

try:

if self.qsize() > 0:

job_id = self.get()

pool.apply_async(Scheduler.verify_func, args=(job_id,))

except Exception as e:

logger.exception("QUEUE EXCEPTION : Exception occured while processing requests in the VERIFICATION QUEUE")

使用池中的进程并并行运行verify_func。这会给我更多的表现吗?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值