簡體   English   中英

Python創建一個線程並在按下鍵時啟動它

[英]Python create a thread and start it on key pressed

我制作了一個python腳本,將數字分解為主要因子。 但是,當處理大量數字時,我可能希望對計算的進度有所了解。 (我簡化了腳本)

import time, sys, threading

num = int(input("Input the number to factor: "))
factors = []

def check_progress():
    but = input("Press p: ")
    if but == "p":
        tot = int(num**(1/2))
        print("Step ", k, " of ", tot, " -- ", round(k*100/tot,5), "%", end="\r", sep="")


t = threading.Thread(target=check_progress) ?
t.daemon = True ?
t.start() ?

k = 1
while(k != int(num**(1/2))):
    k = (k+1)
    if num%k == 0:
        factors.append(int(k))
        num = num//k
        k = 1
print(factors)

我想知道是否有一種方法可以顯示按需顯示的進度,例如,在循環過程中,我按一個鍵並顯示進度?

如何在腳本中實現類似這樣的線程?

謝謝,抱歉我的英語

編輯:

def check_progress():
    while True:
        but = input("## Press return to show progress ##")
        tot = int(num**(1/2))
        print("Step ", k, " of ", tot, " -- ", round(k*100/tot,5), "%", sep="")

這是一種可能的設計:

主線程:

  • 創建隊列和線程
  • 啟動進度線程
  • 等待用戶輸入
    • 輸入時:
    • 隊列的彈出結果(可能為None
    • 顯示它

進度線程:

  • 把工作放在隊列中

我可以提供示例,但我覺得您願意學習。 隨時發表評論以尋求幫助。

編輯:帶有隊列的完整示例。

from time import sleep
from Queue import Queue
from threading import Thread


# Main thread:
def main():
    # create queue and thread
    queue = Queue()
    thread = Thread(target=worker, args=(queue,))

    # start the progress thread
    thread.start()

    # wait user input
    while thread.isAlive():
        raw_input('--- Press any key to show status ---')

        # pop result from queue (may be None)
        status = queue.get_nowait()
        queue.task_done()

        # display it
        if status:
            print 'Progress: %s%%' % status
        else:
            print 'No status available'

# Progress thread:
def worker(queue):
    # do the work an put status in queue
    # Simulate long work ...
    for x in xrange(100):
        # put status in queue
        queue.put_nowait(x)
        sleep(.5)

if __name__ == '__main__':
    main()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM