线程用完:UWSGI +具有GeventHTTPClient的多线程Python应用程序

ctpaquette

我当前正在运行的Python Web API在uWSGI + NGINX堆栈上不是多线程的,没有取得很大的成功。由于新的操作需求,我实现了一个新版本,其中包括对外部数据源的多线程请求。但是,当我使用--enable-threads在uWSGI下部署此新的多线程构建时,几分钟后,计算机用完了可用线程。

通过使用监视线程计数,我能够将问题与我的外部HTTP请求使用geventhttpclient隔离开来ps -eLf | grep <process id>| wc -l我的应用程序中目前有2个工作线程(两个外部请求),因此我注意到,每当我从API中命中/发出请求时,应用程序线程使用计数就会增加2。如果我将geventhttpclient的使用与仅在这些工作线程之一中使用标准python Requests模块,线程计数仅增加1。

注意:我使用HTTPClient.close()关闭每个线程内的连接。

这使我怀疑geventhttpclient创建的新线程在多线程uWSGI应用程序中使用时不会终止。

有一个简单的方法可以解决这个问题吗?在非多线程uWSGI应用程序中,geventhttpclient的性能非常出色,因此我希望继续使用它。

谢谢,让我知道是否能提供更多信息。

罗伯托

将非阻塞程序(geventhttpclient)与阻塞程序(uWSGI线程/进程)混合在一起是完全错误的。这是一条通用规则:即使您的应用程序99%处于非阻止状态,它仍然处于阻止状态。gevent利用堆栈切换来模拟阻塞编程范例这一事实进一步放大了这一点。

这就像协作式多任务处理,由所谓的“ gevent-hub”进行管理。不幸的是,尽管您的greenlets能够发出http请求,但它们永远不会终止,因为一旦请求结束,gevent hub将再也不会运行。

如果要维持geventhttpclient方法,则必须在gevent模式下设置uWSGI,但是需要确保应用程序使用的所有模块和技术都对gevent友好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

线程用完:UWSGI +具有GeventHTTPClient的多线程Python应用程序

来自分类Dev

具有(春季)ThreadPoolTaskExecutor的多线程应用程序

来自分类Dev

具有(Spring)ThreadPoolTaskExecutor的多线程应用程序

来自分类Dev

使用某种任务调度或多线程将 Word 自动化应用程序转换为具有多个线程

来自分类Dev

应用程序中有很多线程适得其反吗?

来自分类Dev

在多线程c#应用程序中嵌入Python

来自分类Dev

预分叉多线程Python应用程序

来自分类Dev

预分叉多线程Python应用程序

来自分类Dev

如何管理 Python Tkinter 应用程序多线程

来自分类Dev

AJP线程用完

来自分类Dev

多线程应用程序中的QTimer

来自分类Dev

ncurses在多线程应用程序中

来自分类Dev

多线程Windows Phone应用程序

来自分类Dev

WinAPI多线程应用程序

来自分类Dev

同步方法多线程应用程序

来自分类Dev

用于django应用程序的uWSGI + nginx避免了pylibmc多线程并发问题?

来自分类Dev

单线程CPU上的多线程应用程序?

来自分类Dev

如何在多线程应用程序中存储线程

来自分类Dev

Python:在多线程应用程序中,为每个线程打印单独的bash行

来自分类Dev

具有多个jframe线程的Java应用程序

来自分类Dev

具有大量匿名线程的Jboss 4.2.3应用程序

来自分类Dev

uWSGI 惰性应用程序和线程池

来自分类Dev

具有多线程的 Python 装饰器

来自分类Dev

Uwsgi与gevent vs线程

来自分类Dev

多线程应用程序中带有Synclock语句的ConcurrentQueue(T)VS List(OfT)

来自分类Dev

在多线程应用程序中使用带有Media Foundation接口的P / Invoke发生AccessViolationException

来自分类Dev

独立Java多线程应用程序的Db连接池有意义吗?

来自分类Dev

多线程Java应用程序中的异常行为(没有锁的死锁?)

来自分类Dev

具有QThread和线程模块的Python多线程

Related 相关文章

  1. 1

    线程用完:UWSGI +具有GeventHTTPClient的多线程Python应用程序

  2. 2

    具有(春季)ThreadPoolTaskExecutor的多线程应用程序

  3. 3

    具有(Spring)ThreadPoolTaskExecutor的多线程应用程序

  4. 4

    使用某种任务调度或多线程将 Word 自动化应用程序转换为具有多个线程

  5. 5

    应用程序中有很多线程适得其反吗?

  6. 6

    在多线程c#应用程序中嵌入Python

  7. 7

    预分叉多线程Python应用程序

  8. 8

    预分叉多线程Python应用程序

  9. 9

    如何管理 Python Tkinter 应用程序多线程

  10. 10

    AJP线程用完

  11. 11

    多线程应用程序中的QTimer

  12. 12

    ncurses在多线程应用程序中

  13. 13

    多线程Windows Phone应用程序

  14. 14

    WinAPI多线程应用程序

  15. 15

    同步方法多线程应用程序

  16. 16

    用于django应用程序的uWSGI + nginx避免了pylibmc多线程并发问题?

  17. 17

    单线程CPU上的多线程应用程序?

  18. 18

    如何在多线程应用程序中存储线程

  19. 19

    Python:在多线程应用程序中,为每个线程打印单独的bash行

  20. 20

    具有多个jframe线程的Java应用程序

  21. 21

    具有大量匿名线程的Jboss 4.2.3应用程序

  22. 22

    uWSGI 惰性应用程序和线程池

  23. 23

    具有多线程的 Python 装饰器

  24. 24

    Uwsgi与gevent vs线程

  25. 25

    多线程应用程序中带有Synclock语句的ConcurrentQueue(T)VS List(OfT)

  26. 26

    在多线程应用程序中使用带有Media Foundation接口的P / Invoke发生AccessViolationException

  27. 27

    独立Java多线程应用程序的Db连接池有意义吗?

  28. 28

    多线程Java应用程序中的异常行为(没有锁的死锁?)

  29. 29

    具有QThread和线程模块的Python多线程

热门标签

归档