我想要的是让5个线程逐行读取文件的内容。 第一个线程必须读取该行,我希望线程从不同点开始每隔5行读取一次。
(Index Pos)
t1 reads >>> 0, 5, 10, 15
t2 reads >>> 1, 6, 11, 16
以此类推。
当前,我尝试使用模数来执行此操作,但是存在一些质数(例如15)引起问题的问题。这不是我的最后一篇文章,但是这是我正在显示的内容,因为我使用的内容太糟糕了,没有任何意义。
def function(n):#Function to generate hash
count = n
for line in open('wordlist.txt'):#For each line in a file do this
if count % 2 == 0:
linex = line.strip()
hashed = hashlib.md5(linex.encode()).hexdigest()
#print(line + ":" + hashed)
count += 1
else:
count += 1
长话短说,我需要一些帮助,我将非常感谢帮助我解决此问题的人。
只需要在文本文件的行上进行迭代即可。
答案 0 :(得分:0)
这是我所建议的一个例子。这个过程stdin, 向五名工人汇款。第一位工人将 得到0、5、10、15等行,第二个工作人员将得到1、6、11、16 等,等等。
import itertools
import queue
import sys
import threading
class Worker(threading.Thread):
def __init__(self, id, q, **kwargs):
self.id = id
self.q = q
super().__init__(daemon=True, **kwargs)
def run(self):
while True:
# Receive another (line_number, line) tuple from the
# main thread.
ln, line = self.q.get()
if ln == -1:
break
print('thread {} processing line {}: {}'.format(self.id, ln, line))
def main():
workers = []
queues = []
# create workers, and for each worker create a queue that will
# be used to pass data to the worker.
for i in range(5):
q = queue.Queue()
w = Worker(i, q)
workers.append(w)
queues.append(q)
w.start()
# create a "cycle": an infinite iterator that will loop over
# the list of queues.
q_cycle = itertools.cycle(queues)
for ln, line in enumerate(sys.stdin):
q = next(q_cycle)
q.put((ln, line))
# tell the workers to exit
for q in queues:
q.put((-1, None))
# wait for workers to finish
for w in workers:
w.join()
if __name__ == '__main__':
main()