简体   繁体   English

使用python时gevent中发生了线程异常

[英]thread exception occurred in gevent when using python

When I run this python code, but some thread problem occurred. 当我运行这个python代码,但发生了一些线程问题。 I search the internet,but I don't find the answer. 我搜索互联网,但我找不到答案。

import urllib2
from time import time
import gevent
import numpy as np

tmp = np.loadtxt('data.txt', dtype=str)
visit_list=tmp[:20]

result_list =[]

def visitUrl(u):
  print 'start %s' %u
  begin = time()
  data = urllib2.urlopen(u).read()
  print len(data)
  print 'end-------- %s' %u
  end = time()
  print ('%s ::begin=%s ::end= %s::end-begin= %s' %(u, begin,end, end-begin))

for i in range(3):
    reqs = []
    begin = time()
    for u in visit_list:
        start = time()
        reqs.append(gevent.spawn(visitUrl, u))
        stop = time()
        print ('%s $$$ %s' %(u, stop-start))
    #reqs = [gevent.spawn(visitUrl, u) for u in visit_list]
    gevent.joinall(reqs)
    end = time()

    print 'ciclie %s=%s' %(i, end - begin)
    result_list.append(end-begin)

the problem: 问题:

Exception KeyError: KeyError(4475468392,) in <module 'threading' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.pyc'> ignored

According to this thread your main loop ends before all threads have done its job. 根据这个线程,你的主循环在所有线程完成其工作之前结束。

Just call gevent.shutdown() at the end or increase timeout while calling joinall : 只需在结束时调用gevent.shutdown()或在调用joinall增加超时:

gevent.joinall(reqs, timeout=30)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM