相关疑难解决方法(0)

我听说i ++不是线程安全的,++我是线程安全的吗?

我听说i ++不是一个线程安全的语句,因为在汇编时它减少了将原始值存储为某个地方的temp,递增它,然后替换它,这可能被上下文切换中断.

但是,我想知道++ i.据我所知,这将减少为单个汇编指令,例如'add r1,r1,1',因为它只有一条指令,所以它不会被上下文切换中断.

任何人都可以澄清吗?我假设正在使用x86平台.

c c++ multithreading

89
推荐指数
6
解决办法
2万
查看次数

Python itertools计数器的当前值是什么

itertools.countPython(2.7.9)中的计数器对于线程安全计数非常方便.我怎样才能获得计数器的当前值?

计数器递增并在每次调用时返回最后一个值next():

import itertools
x = itertools.count()
print x.next()  # 0
print x.next()  # 1
print x.next()  # 2
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.

我没有办法在没有调用的情况下获得计数器的当前值next(),这会产生增加计数器或使用repr()函数的不良副作用.

继上述内容之后:

print repr(x)  # "count(3)"
Run Code Online (Sandbox Code Playgroud)

所以你可以解析输出repr().就像是

current_value = int(repr(x)[6:-1])
Run Code Online (Sandbox Code Playgroud)

会做的伎俩,但真的很难看.

有没有办法更直接地获得计数器的当前值?

python python-itertools

8
推荐指数
2
解决办法
2295
查看次数

在 Python 中,如何等到处理完多个队列中的所有项目?

在下面的代码中,我有两个队列来运行不同类型的线程。这些线程递归地添加到彼此的队列中(队列 1 获取一些信息,队列 2 处理它并将更多信息添加到队列 1)。

我想等到两个队列中的所有项目都被完全处理。目前我正在使用此代码

queue.join()
out_queue.join()
Run Code Online (Sandbox Code Playgroud)

问题是当第一个队列暂时用完要做的事情时,它会关闭,因此在此之后它永远不会看到队列 2(out_queue)添加到它的内容。

我添加了 time.sleep() 函数,这是一个非常糟糕的修复程序,到 30 年代,两个队列都已填满而不会耗尽。

解决此问题的标准 Python 方法是什么?我是否必须只有一个队列,并将其中的项目标记为应该由哪个线程处理?

queue = Queue.Queue()
out_queue = Queue.Queue()

class ThreadUrl(threading.Thread):
    """Threaded Url Grab"""
    def __init__(self, queue, out_queue):
        threading.Thread.__init__(self)
        self.queue = queue
        self.out_queue = out_queue

    def run(self):
        while True:
            row = self.queue.get()
            
            request = urllib2.Request(row[0], None, req_headers)
            
            # ... some processing ...
            
            self.out_queue.put([row, http_status, page])
            
            self.queue.task_done()

class DatamineThread(threading.Thread):
    def __init__(self, out_queue, mysql):
        threading.Thread.__init__(self)
        self.out_queue = out_queue
        self.mysql = mysql

    def run(self):
        while True:
            row …
Run Code Online (Sandbox Code Playgroud)

python queue multithreading

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

标签 统计

multithreading ×2

python ×2

c ×1

c++ ×1

python-itertools ×1

queue ×1