您可能已经知道我在说什么。因此,让我更清楚地解释一下。
例如:-我有四个运行模拟噪声的线程,诸如此类。
th1 = threading.Thread(target=connCheck, args= (newurl, schemess, 21))
th2 = threading.Thread(target=connCheck, args=( newurl, schemess, 22))
th3 = threading.Thread(target=connCheck, args= (newurl, schemess,80))
th4 = threading.Thread(target=connCheck, args=(newurl, schemess,8080))
(这是用于扫描端口号21、22、80、8080的扫描器。)
我这样运行这些线程:-
th1.start()
th2.start()
th3.start()
th4.start()
th4.join()
注意:-connCheck是用于告知哪些端口已打开的功能。
因此在我的终端中,这表明两个端口都以非常不好的方式打开了 BUT 。有时它会这样打印
List of port open:-
[+]21 [+]22 [+]80
[+]8080
打印出来的一些东西是这样的:-
List of port open:-
[+]21
[+]22 [+]80
[+]8080
有时它会以其他方式打印。
所以我希望他们以像Line wise这样的单一好方式打印。但是要记住的最重要的一点是,我想同时运行上述所有线程,以免影响扫描速度。
所以我来这里问你。因此,请任何人在这里引导我。
谢谢
[EDIT]:-这是conncheck函数:-
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(3)
result = sock.connect_ex((ip, port))
newip = schemess+ip+slash
if port == 21:
if result == 0:
print "\t [+]" + str(port)
ftpurls.append(newip)
dicta(newip, port)
else:
if result == 0:
print '\t' + str(port)+ '\n'
dicta(newip, port)
sock.close()
except Exception as e:
print str(e) + '\n'
请忽略dicta函数。
答案 0 :(得分:0)
有几种方法可以使用锁,而另一种方法是使用logging
模块。我一直在使用threading.Lock()
编写多线程代码,但是最近发现logging
更加易于使用。
lock = threading.Lock()
with lock:
print("...")
with lock
将在进入时调用lock.acquire()
,在退出时将调用lock.release()
。或者您可以手动调用这些。但是请确保在获得后release
进行操作,否则将面临僵局。
另一种更简单的方法是使用我提到的logging
。 logging
库是线程安全的,这意味着任何线程都可以同时使用这些函数。使用此模块还可以将日志写入日志文件。
import logging
logging.basicConfig(format='%(message)s')
logging.info("...")