相关疑难解决方法(0)

如何在Python中使用multiprocessing.pool创建全局锁/信号量?

我想在子进程中限制资源访问.例如 - 限制http下载,磁盘io等.我如何实现它扩展这个基本代码?

请分享一些基本的代码示例.

pool = multiprocessing.Pool(multiprocessing.cpu_count())
while job_queue.is_jobs_for_processing():
  for job in job_queue.pull_jobs_for_processing:
    pool.apply_async(do_job, callback = callback)
pool.close()
pool.join()
Run Code Online (Sandbox Code Playgroud)

python python-multiprocessing

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

python lock with-statement和timeout

我正在使用这样的Python 3序列:

lock = threading.Lock()
res = lock.acquire(timeout=10)
if res:
    # do something ....
    lock.release()
else:
    # do something else ...
Run Code Online (Sandbox Code Playgroud)

我更喜欢使用with语句而不是显式的"获取"和"释放",但我不知道如何获得超时效果.

locking with-statement python-3.x

10
推荐指数
2
解决办法
4887
查看次数

Lock.acquire(False) 可以吗?

我有一段代码

    locked = lock.acquire(False)
        if locked:  break
Run Code Online (Sandbox Code Playgroud)

根据 python 文档:
lock.aquire(False):- 当调用阻塞参数设置为 False 时,不阻塞。如果将阻塞设置为 True 的调用会阻塞,则立即返回 False;否则,将锁设置为锁定并返回 True。 我很理解他们所说的,但有人可以简化这一点,并请解释我与上述代码的关系。

python locking

7
推荐指数
1
解决办法
5212
查看次数

是否有一种优雅或Pythonic方式来中断线程中的time.sleep()调用?

下面的代码按我期望的方式工作,即:

  • 有一个QThread("Ernie")从1到8计数,在计数之间休眠1秒
  • 有一个无偿的UI小部件("Bert")
  • 在正常操作下,程序运行直到线程完成并且UI关闭
  • Ctrl-C键盘中断将在正常完成之前正常停止程序.

要做到这一点,我不得不将1秒钟的睡眠分解为50毫秒的块状物来检查旗帜.

是否有更多的Pythonic方式在线程中睡眠一段时间(例如1秒)但是可以通过某些标志或信号中断?

        try:
            for i in xrange(8):
                print "i=%d" % i
                for _ in xrange(20):
                    time.sleep(0.05)
                    if not self.running:
                        raise GracefulShutdown
        except GracefulShutdown:
            print "ernie exiting"        
Run Code Online (Sandbox Code Playgroud)

我宁愿这样做,并在某种程度上导致线程中的GracefulShutdown异常:

        try:
            for i in xrange(8):
                print "i=%d" % i
                time.sleep(1)
                # somehow allow another thread to raise GracefulShutdown
                # during the sleep() call
        except GracefulShutdown:
            print "ernie exiting"        
Run Code Online (Sandbox Code Playgroud)

全程;

from PySide import QtCore, QtGui
from PySide.QtGui import QApplication
import sys
import signal
import time

class GracefulShutdown(Exception):
    pass

class …
Run Code Online (Sandbox Code Playgroud)

python multithreading

5
推荐指数
2
解决办法
4132
查看次数

Python等同于Java的“ tryLock”(惯用语言)?

在Java中,tryLock(很长时间,TimeUnit单位)可以用作获取锁的非阻塞尝试。如何实现python中的等效功能?(Pythonic | 惯用方式是首选!)

Java tryLock:

ReentrantLock lock1 = new ReentrantLock()
if (lock1.tryLock(13, TimeUnit.SECONDS)) { ... }
Run Code Online (Sandbox Code Playgroud)

Python锁:

import threading
lock = Lock()
lock.acquire() # how to lock.acquire(timeout = 13) ?
Run Code Online (Sandbox Code Playgroud)

python multithreading asynchronous locking nonblocking

4
推荐指数
2
解决办法
2179
查看次数