Я пытаюсь понять основные потоки в python, мне трудно понять, как работает объединение с модулем очереди. Heres пример сервера, используемый в том, как я читаю: http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/2/. В основном то, что я не понимаю, как переменная pickledList заканчивается доступны рамки нитей, которые будут отправлены к клиенту, так как его не пропускал к потоку в кодеможет кто-то помочь мне понять этот короткий .py
import pickle
import Queue
import socket
import threading
# We'll pickle a list of numbers, yet again:
someList = [ 1, 2, 7, 9, 0 ]
pickledList = pickle.dumps (someList)
# A revised version of our thread class:
class ClientThread (threading.Thread):
# Note that we do not override Thread's __init__ method.
# The Queue module makes this not necessary.
def run (self):
# Have our thread serve "forever":
while True:
# Get a client out of the queue
client = clientPool.get()
# Check if we actually have an actual client in the client variable:
if client != None:
print 'Received connection:', client [ 1 ] [ 0 ]
client [ 0 ].send (pickledList)
for x in xrange (10):
print client [ 0 ].recv (1024)
client [ 0 ].close()
print 'Closed connection:', client [ 1 ] [ 0 ]
# Create our Queue:
clientPool = Queue.Queue (0)
# Start two threads:
for x in xrange (2):
ClientThread().start()
# Set up the server:
server = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
server.bind (('', 2727))
server.listen (5)
# Have the server serve "forever":
while True:
clientPool.put (server.accept())
Будет ли он работать таким же образом, если объявлен pickledList после объявления класса в списке? – Ryan
Простите, Кристофер, что вы говорите о «глобальном», к сожалению, неверно. Глобальная область уровня модуля является частью регулярной поисковой цепочки в Python, без необходимости использования глобального ключевого слова. Вы должны использовать ключевое слово global только в том случае, если вы хотите «переустановить» переменную на новый объект, т. Е. Если вы хотите использовать для нее оператор присваивания. – krawyoti
@krawyoti: Обратите внимание, что я сказал «чтобы было ясно». Я знаю, что это не синтаксически необходимо. – Christopher