用python进行多线程处理?

时间:2016-04-27 21:42:05

标签: python linux multithreading python-2.7

我编写了一个脚本来猜测一个引脚,它有点工作,但脚本忽略了sleep命令,而且命令threading.lock()也不起作用。那么你能看一下我的剧本并告诉我如何让我的剧本变得更好吗?

#!/usr/bin/env python -w 
#
# 
import time
import random
import os
import threading
import sys


lock = threading.Lock()
def Random(name,repeat):
    lock.acquire
    while repeat != 0:
        Pin = random.randint(0,9999)        
        print "[+] Trying: %d"%Pin;time.sleep(3)
        if Pin == 5656:
            os.system("clear");print '[+] Pin Found: %d' %Pin;time.sleep(3)
            sys.exit()
        repeat-= 1

    if lock.acquire():
        lock.release()


def Order(name,repeat):
    lock.acquire

    while repeat != 0:
        Pin = random.randint(0,9999)        
        print "[!] Trying: %d"%Pin;time.sleep(3)

        if Pin == 5656:
            os.system("clear");print '[+] Pin Found: %d' %Pin;time.sleep(3)
            sys.exit()
        repeat-= 1



    if lock.acquire():
        lock.release()




def Main():
    Brute_1 = threading.Thread(target=Random,args=('Random_Guess',10))
    Brute_2 = threading.Thread(target=Order,args=('Order_Guess',10))
    Brute_1.start()
    Brute_2.start()


if __name__=='__main__':
    Start = raw_input("Press Enter To Start")
    while 1:
        os.system("clear");
        Main()

1 个答案:

答案 0 :(得分:0)

列表末尾的while循环将每次创建两个新线程。 sleep函数由新线程调用,而不是主线程调用,因此主线程将尽可能快地通过while循环。这将产生成千上万的新线程,直到系统崩溃。你认为睡眠功能不起作用,但当然是;只是每当你看到控制台上印有一条线时,它就是新线程的第一个猜测。我不认为这就是你想要的。我不知道你要做什么,所以我无法进一步帮助。

同样,pasztorpisti暗示,lock.acquire是一个函数,需要使用函数调用语法(lock.acquire())调用,否则什么都不会发生。话虽如此,您需要先清理高级结构。

获得锁定后,其他线程在尝试获取相同锁定时会被阻止。 time.sleep函数不释放锁,因此只要Thread1具有锁,即使Thread1正在休眠,Thread2也无法获取它。