相关疑难解决方法(0)

CPython中的全局解释器锁(GIL)是什么?

什么是全球解释器锁,为什么它是一个问题?

围绕从Python中删除GIL已经产生了很多噪音,我想知道为什么这么重要.我自己从未编写过编译器或解释器,所以不要节俭细节,我可能需要他们理解.

python gil python-internals

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

Python字典中的线程安全

我有一个持有字典的班级

class OrderBook:
    orders = {'Restaurant1': None,
              'Restaurant2': None,
              'Restaurant3': None,
              'Restaurant4': None}

    @staticmethod
    def addOrder(restaurant_name, orders):
        OrderBook.orders[restaurant_name] = orders
Run Code Online (Sandbox Code Playgroud)

我正在运行调用该方法的4个线程(每个餐厅一个)OrderBook.addOrder.这是每个线程运行的函数:

def addOrders(restaurant_name):

    #creates orders
    ...

    OrderBook.addOrder(restaurant_name, orders)
Run Code Online (Sandbox Code Playgroud)

这是安全的,还是我必须在打电话前使用锁addOrder

python multithreading dictionary thread-safety

92
推荐指数
3
解决办法
6万
查看次数

是否有“单插槽”队列?

我需要使用一个只包含一个元素的队列,任何新元素都会丢弃现有元素。有内置解决方案吗?

我编码的解决方案有效,但我努力不重新发明轮子:)

import Queue

def myput(q, what):
    # empty the queue
    while not q.empty():
        q.get()
    q.put(what)

q = Queue.Queue()
print("queue size: {}".format(q.qsize()))
myput(q, "hello")
myput(q, "hello")
myput(q, "hello")
print("queue size: {}".format(q.qsize()))
Run Code Online (Sandbox Code Playgroud)

编辑:遵循一些评论和答案——我知道一个变量就是为此:) 不过,在我的程序中,队列将用于进程之间的通信。

python queue

5
推荐指数
1
解决办法
1847
查看次数