首页 文章

python中的多处理和多线程

提问于
浏览
0

多线程/多处理以下代码片段的最佳方法是什么?

摘要:素数从3 ......及以后找到 . 然后将每个素数附加到数组 primes[] ,其中,找到与前一个素数的间隙 . 连续的最长偶数序列将打印到控制台 .

我已经阅读了有关此主题的其他问题和说明,但我很困惑,不知道从哪里开始 .

from timeit import default_timer as timer

start = timer()
gap = 0
primes = []
for i in range(3,999999999,2):
    prime_check = True
    for j in range(0,int(len(primes)/2.9)):
        if(i%primes[j] == 0):
            prime_check = False
            break
    if(prime_check):
        primes.append(i)
    #print("{0} is {1}".format(i,prime_check))
    if(len(primes)>1):
        if(primes[-1] - primes[-2] > gap):
            gap = primes[-1] - primes[-2]
            end = timer()
            print("Gap: {0} ({1}, {2}) Time: {3:.2f}s".format(gap,primes[-2],primes[-1],end-start))

1 回答

  • 0

    我将采用的方法是计算素数,创建一个间隔的每两个连续素数的队列,然后创建线程来计算间隙 . 由于计算素数是一个连续的过程,因此在该部分上使用线程更加困难 .

    from timeit import default_timer as timer
    from queue import Queue
    import threading as th
    
    start = timer()
    NUMBER_OF_THREADS = 8
    queue = Queue() 
    gap = 0
    primes = []
    
    def calculate_primes():
        for i in range(3,999999999,2):
            prime_check = True
            for j in range(0,int(len(primes)/2.9)):
                if(i%primes[j] == 0):
                    prime_check = False
                    break
            if(prime_check):
                primes.append(i)
                if len(primes) > 1:
                    queue.put((primes[-1], primes[-2]))
    
    # Create worker threads
    def create_workers():
        for _ in range(NUMBER_OF_THREADS):
            t = th.Thread(target=work)
            t.start()
    
    # Do the next job in the queue
    def work():
        while not queue.empty():
            integers = queue.get()
            get_gap(integers[0], integers[1])
            queue.task_done()
    
    def get_gap(x, y):
        global gap
        if(x - y > gap):
            gap = x - y
            end = timer()
            print("Gap: {0} ({1}, {2}) Time: {3:.2f}s".format(gap,y,x,end-start))
    
    calculate_primes()
    create_workers()
    

相关问题