什么是全球解释器锁,为什么它是一个问题?
围绕从Python中删除GIL已经产生了很多噪音,我想知道为什么这么重要.我自己从未编写过编译器或解释器,所以不要节俭细节,我可能需要他们理解.
我有一个持有字典的班级
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?
我需要使用一个只包含一个元素的队列,任何新元素都会丢弃现有元素。有内置解决方案吗?
我编码的解决方案有效,但我努力不重新发明轮子:)
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)
编辑:遵循一些评论和答案——我知道一个变量就是为此:) 不过,在我的程序中,队列将用于进程之间的通信。