Для анализа веб-скрепок мне нужны две петли, которые запускаются постоянно, один возвращает список с обновляемыми веб-сайтами каждые x минут, в то время как другой анализирует сайты (старые новые) каждые y секунд. Это код конструкции, которая служит примером, что я пытаюсь сделать, но это не работает: кодекс был отредактирован, чтобы включить ответы и мои исследованияработает два взаимозависимых цикла while в python?
from multiprocessing import Process
import time, random
from threading import Lock
from collections import deque
class MyQueue(object):
def __init__(self):
self.items = deque()
self.lock = Lock()
def put(self, item):
with self.lock:
self.items.append(item)
# Example pointed at in [this][1] answer
def get(self):
with self.lock:
return self.items.popleft()
def a(queue):
while True:
x=[random.randint(0,10), random.randint(0,10), random.randint(0,10)]
print 'send', x
queue.put(x)
time.sleep(10)
def b(queue):
try:
while queue:
x = queue.get()
print 'recieve', x
for i in x:
print i
time.sleep(2)
except IndexError:
print queue.get()
if __name__ == '__main__':
q = MyQueue()
p1 = Process(target=a, args=(q,))
p2 = Process(target=b, args=(q,))
p1.start()
p2.start()
p1.join()
p2.join()
Итак, это мой первый проект Python после онлайн-курс обучения, и я изо всех сил стараюсь здесь много времени. Теперь я понимаю, что функции действительно не работают параллельно, так как b не запускается до тех пор, пока не будет завершено (я использовал this, отвечая на таймер и пока True). EDIT: Даже после использования подхода, указанного в ответе, я думаю, что это все еще так, поскольку queue.get()
выдает сообщение IndexError, deque пуст. Я могу только объяснить, что процесс не заканчивается, потому что когда я печатаю queue.get() сразу после .put (x), он не пуст.
В конце концов я хочу выход так:
send [3,4,6]
3
4
6
3
4
send [3,8,6,5] #the code above gives always 3 entries, but in my project
3 #the length varies
8
6
5
3
8
6
.
.
Что мне нужно для наличия двух действительно параллельных циклов, где один возвращается обновленный список каждые х минут, когда другой цикл необходим в качестве основы для анализа? Действительно ли процесс - это правильный инструмент? И где я могу получить хорошую информацию о разработке моей программы.
Тема, безусловно, самый простой ответ на вашу проблему! Это может быть страшно, но это довольно легко сделать в Python. – Fabich
@Lordofdark. Я возьму этот совет и прочитаю темы! Благодарю. – user2822564