`

用threading 解决 gunicorn worker timeout

阅读更多

         产生worker timeout 的背景

        while 1:

              .....

              time.sleep(1)

       gunicorn运行起来,只等待了30s,就卡住了,没报任何异常或err,查了gunicorn 官方文档,原来是线程默认等待30s 就kill 掉,再restart

       http://docs.gunicorn.org/en/stable/settings.html

       

timeout

  • -t INT, --timeout INT
  • 30

Workers silent for more than this many seconds are killed and restarted.

Generally set to thirty seconds. Only set this noticeably higher if you’re sure of the repercussions for sync workers. For the non sync workers it just means that the worker process is still communicating and is not tied to the length of time required to handle a single request.

 

         根本原因找到了,在gunicorn启动加了--timeout  120 ,还是超过30s 就worker timeout.搜了一圈stack没发现好的解决方法。

        解决这个问题,目前最好的方法,就是在程序改代码,原先是主线程调用,用threading包装一下

        如:

         import threading

         t = threading.Thread(name = '', target = func ,kwargs{})

         t.daemon = True

         t.start()

         

          t = threading.Thread(name='result_package', target=result_package, args=(pack_name, task, issue))

   t.daemon = True
    t.start()

                 

           这样就在主线程下,把方法包装起来。

           顺便用

           Event().wait(15)  替代 time.sleep(16)

     这样写法的好处是不占用cpu,释放!

          

           刚开始,分析原因花了不少时间,几行代码就把worker timeout解决了。之前试了map.thread不行。

          准备用队列(celery+redis)替代原来的逻辑,只是工作量有点大,太重了。

            

0
0
分享到:
评论

相关推荐

    TimeOut.rar

    1. **定时器(Timer)**:在C#中,可以使用`System.Timers.Timer`或`System.Threading.Timer`来创建一个定时器。当设定的时间到达时,定时器会触发一个事件,从而检查程序是否还在执行。如果程序仍在运行,就可能会...

    python使用threading获取线程函数返回值的实现方法

    以下将详细解释如何在Python中使用`threading`获取线程函数的返回值。 首先,我们需要理解`threading`模块中的核心类和方法。`Thread`类是创建线程的基础,它可以接受一个`target`参数,这个参数是线程要执行的函数...

    threading模块

    `wait(timeout=None)`方法的超时参数`timeout`可以设置等待的最长时间,超时后返回`False`,否则返回`True`。当使用`RLock`时,`wait()`会避免直接调用`release()`,而是使用`RLock`的内部接口来确保正确地解锁和...

    system.Threading.Timer的使用

    timer.Change(Timeout.Infinite, Timeout.Infinite); } static void DisplayTime(object state) { Console.WriteLine($"Timer triggered! State: {state}"); } } ``` 在这个例子中,我们创建了一个`Timer`,...

    .Net 3.5 使用 System.Threading.Task

    .Net 3.5 下使用的 System.Threading.Tasks。 安装完成后,添加引用时只需要在安装目录 C:\Program Files (x86)\Microsoft Reactive Extensions\Redist\DesktopV2 下找到 System.Threading.dll,添加即可

    简单的定时任务 .NETCore3.1 WorkerService.zip

    这个压缩包 "简单的定时任务 .NETCore3.1 WorkerService.zip" 包含了一个名为 "NetCoreWorkerService-master" 的项目,该项目是一个示例,展示了如何在 Windows 和 Linux 上使用 Worker Service 来执行定期任务。...

    使用threading建立了一个多线程的基础程序

    使用threading建立了一个多线程的基础程序 使用threading建立了一个多线程的基础程序 使用threading建立了一个多线程的基础程序 使用threading建立了一个多线程的基础程序 使用threading建立了一个多线程的基础...

    Python内置库:threading(多线程操作).docx

    `threading`模块提供的同步原语如锁、条件变量、信号量等,可以帮助解决这些问题,确保数据的一致性。 **5. 注意事项** - 虽然`threading`模块提供了丰富的功能,但在某些场景下,如CPU密集型任务,多线程并不能...

    线程示例WorkerThread_demo

    这个类的实例可能会被`WorkerThread`在`DoWork`方法中使用,确保这些操作不会阻塞UI线程。 `AssemblyInfo.cs`是C#项目的元数据文件,包含关于程序集的信息,如版本、版权和公钥等。 `.csproj`和`.sln`文件是项目和...

    C#多线程操作控件threading的使用

    C#多线程操作控件threading的使用 在C#中,多线程操作控件是一个常见的问题。由于控件是主线程创建的,因此不能直接从另一个线程访问。这篇文章将探讨如何使用threading来实现多线程操作控件。 首先, let's 看一...

    threading.timer 实例项目源代码

    `threading.Timer`的基本使用方法是创建一个Timer对象,传入两个参数:间隔时间和回调函数。间隔时间是定时器启动后等待的秒数,回调函数是在等待时间结束后被调用的函数。例如: ```python import threading def ...

    Python 使用threading+Queue实现线程池示例

    1、为什么需要使用线程池 1.1 创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率。 记创建线程消耗时间T1,执行任务消耗时间T2,销毁线程消耗时间T3,如果T1+T3>T2,那说明开启一个...

    .NET Framework 3.5上使用System.Threading.Tasks

    我在做一个兼容WindowsXP项目时用到,用梯子到外面找来的。 由于 .NET 3.5下并没有官方实现的 Task 库,所以,是通过 VS 中 NuGet 取得的 非官方 实现的 Task 库,调用接口与官方.NET 4.0 后的应该是差不多的。

    C#中Forms.Timer、Timers.Timer、Threading.Timer的用法分析

    本文实例讲述了C#中Forms.Timer、Timers.Timer、Threading.Timer的用法分析,分享给大家供大家参考。具体分析如下: 在.NET Framework里面提供了三种Timer ① System.Windows.Forms.Timer ② System.Timers.Timer ③...

    Python多线程编程方式2 threading库的介绍源码

    t = threading.Thread(target=worker) t.start() ``` 在上述代码中,我们创建了一个新的线程`t`,并将`worker`函数作为线程的目标。调用`start`方法启动线程,使得`worker`函数在新线程中执行。 `threading`库还...

    python多线程-threading模块.pdf

    Python 中的多线程编程是使用 Threading 模块实现的,该模块提供了丰富的功能来创建和管理线程。在学习 Threading 模块之前,需要了解 Python 的基础知识,包括函数、类、对象等概念。 Threading 模块 Threading ...

    python多线程threading.Lock锁用法实例

    本文实例讲述了python多线程threading.Lock锁的用法实例,分享给大家供大家参考。...如果设定了timeout,则在超时后通过返回值可以判断是否得到了锁,从而可以进行一些其他的处理。 复制代码 代码如下:#!/usr/bin/env

    网络编程资料(socket,threading)

    通过Socket编程实现数据传输,多线程保证并发处理,结合异步I/O和事件驱动优化性能,同时解决字符编码、安全等问题,可以构建出满足需求的通讯平台。这些技术的深入理解和实践,对于任何IT专业人士来说都是必不可少...

    C#关于System.Timer的用法

    要解决这个问题,可以使用`Timer.Change`方法将间隔设置为`Timeout.Infinite`,或者直接使用`Dispose`: ```csharp timer.Change(Timeout.Infinite, Timeout.Infinite); // 停止计时器 // 或者 timer.Dispose(); //...

    Threading in C# 中文版

    例如,可以使用`System.Threading.Thread`类来创建一个新的线程对象,并指定该线程将执行的方法。以下是一个创建新线程的示例: ```csharp using System; using System.Threading; class ThreadTest { static ...

Global site tag (gtag.js) - Google Analytics