【问题标题】:Multithreading with python?使用python进行多线程?
【发布时间】:2016-08-22 10:29:17
【问题描述】:

我写了一个脚本来猜测一个引脚,它有点工作但脚本忽略了 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()

【问题讨论】:

  • 你甚至不会在函数的开头调用acquire,也不应该在函数的末尾调用它。我不会直接打电话给acquirerelease。使用带有with 语句的锁。

标签: python linux multithreading python-2.7


【解决方案1】:

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

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

一旦你获得了一个锁,其他线程在尝试获得同一个锁时就会被阻塞。 time.sleep 函数不会释放锁,因此只要 Thread1 有锁 Thread2 就无法获取它,即使 Thread1 正在休眠。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    相关资源
    最近更新 更多