相关疑难解决方法(0)

在Python中使用多处理时应该如何记录?

现在我在框架中有一个中央模块,它使用Python 2.6 multiprocessing模块生成多个进程.因为它使用multiprocessing,所以有模块级多处理感知日志,LOG = multiprocessing.get_logger().根据文档,这个记录器具有进程共享锁,因此您不会sys.stderr通过让多个进程同时写入来解决问题(或任何文件句柄).

我现在遇到的问题是框架中的其他模块不支持多处理.我看到它的方式,我需要使这个中央模块的所有依赖使用多处理感知日志记录.这框架很烦人,更不用说框架的所有客户了.我有没有想到的替代方案?

python logging multiprocessing

213
推荐指数
11
解决办法
11万
查看次数

Python:单独的进程记录到同一个文件?

Python的logging库是否为两个(或多个)单独记录到同一文件的python进程提供了序列化日志记录?从文档中可以看出这一点(我已经阅读过).

如果是这样,那么在完全不同的机器上(共享日志文件将存在于两者都可访问的NFS导出上).

python logging multithreading nfs

16
推荐指数
1
解决办法
1万
查看次数

Python中的持久性多进程共享缓存,具有stdlib或最小依赖性

我只是尝试了一个Python 搁置模块作为从外部服务获取的数据的持久缓存.完整的例子就在这里.

我想知道如果我想让这个多进程安全,最好的方法是什么?我知道redis,memcached和这样的"真正的解决方案",但是我只想使用Python标准库的部分或非常小的依赖性来保持我的代码紧凑,并且在单个进程中运行代码时不会引入不必要的复杂性 - 单线程模型.

很容易想出一个单进程解决方案,但这不适用于当前的Python Web运行时.具体来说,问题在于Apache + mod_wsgi环境

  • 只有一个进程正在更新缓存数据一次(文件锁,不知何故?)

  • 其他进程在更新过程中使用缓存的数据

  • 如果进程无法更新缓存数据,那么在另一个进程可以再次尝试之前会有N分钟的惩罚(以防止雷鸣般的群体等) - 如何在mod_wsgi进程之间发出信号

  • 您没有使用任何"重工具",只有Python标准库和UNIX

此外,如果一些PyPi包没有外部依赖性,请告诉我.欢迎使用替代方法和建议,例如"只使用sqlite".

例:

import datetime
import os
import shelve
import logging


logger = logging.getLogger(__name__)


class Converter:

    def __init__(self, fpath):
        self.last_updated = None
        self.data = None

        self.data = shelve.open(fpath)

        if os.path.exists(fpath):
            self.last_updated = datetime.datetime.fromtimestamp(os.path.getmtime(fpath))

    def convert(self, source, target, amount, update=True, determiner="24h_avg"):
        # Do something with cached data
        pass

    def is_up_to_date(self):
        if not self.last_updated:
            return False

        return datetime.datetime.now() < self.last_updated + self.refresh_delay

    def …
Run Code Online (Sandbox Code Playgroud)

python memcached mod-wsgi shelve multiprocessing

6
推荐指数
1
解决办法
3374
查看次数