uwsgi没有公平对待线程

时间:2014-03-05 01:25:26

标签: python multithreading nginx queue uwsgi

我正在运行uwsgi 2.0,并在nginx之上启用了线程。以下是一些相关设置:

processes = 8
enable-threads = true
threads = 4
master
lazy-apps
single-interpreter
socket-timeout = 30
listen = 1000

在python中,我的应用程序中有一个线程要从队列中使用,但是因为我从apache迁移到nginx / uwsgi,所以看起来消费者线程要花费的时间更长。似乎uwsgi没有给它给主线程的消费者线程提供相同的优先级:

def produce(self):
  while True:
    try:
      item = self.queue.get_nowait()
      self.producer(*item)
  except Empty:
    log.debug('Nothing to produce sleep .1 sec and continue')
    time.sleep(0.1)
  except Exception as e:
    log.error('Producer error: {0}'.format(e))

我尝试了不同的睡眠设置和阻塞get(self.queue.get()),但事实是以前我没有apache / mod_wsgi的问题,put / get几乎同步

以下是初始化队列的代码:

def __init__(self, config, producer_type='producer'):
  # import the producer module, factory and create instance with fabric param
  self.producer = import_producer(producer_type,  config)
  self.queue = Queue()
  self.process_thread = threading.Thread(target=self.produce)
  self.process_thread.daemon = True
  self.process_thread.start()

想知道我在这里做错了什么?性能很好就是这个排队问题。

0 个答案:

没有答案