You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python多线程端口扫描器报错:serverIp为意外关键字参数

解决多线程端口扫描器的关键字参数报错问题

嘿,这个问题其实是你在创建线程时用错了threading.Thread的参数规则啦!

问题原因拆解

你写的这行代码:

t = threading.Thread(serverIp = threading)

完全不符合线程创建的正确逻辑:

  1. threading.Thread的初始化参数里根本没有serverIp这个关键字参数,所以Python解释器会直接报错,说这是意外的关键字参数。
  2. 你把threading(模块本身)赋值给这个不存在的参数,逻辑上也完全不对——创建线程的核心是指定这个线程要执行的函数,而不是传服务器IP或者模块本身。

正确的思路是:线程要执行的是你定义的threader函数,所以需要通过target参数把这个函数传给threading.Thread;至于serverIp,它已经是全局变量,threader和pscan函数都能直接访问到,不需要在创建线程时额外传递。

修正后的完整代码

import socket
import threading
from Queue import Queue  # 替换原有的通配导入,更清晰

print_lock = threading.Lock()
serverIp = socket.gethostbyname('www.google.com')

def pscan(port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        s.connect((serverIp, port))
        with print_lock:
            print('Port %d is open' %(port))
        s.close()
    except:
        pass

def threader():
    while True:
        worker = q.get()
        pscan(worker)
        q.task_done()

q = Queue()

for x in range(30):
    # 修正线程创建的核心代码:指定要执行的目标函数
    t = threading.Thread(target=threader)
    t.daemon = True
    t.start()

for worker in range(1, 101):
    q.put(worker)

q.join()

另外补充个小细节:原代码里的from Queue import *可以改成from Queue import Queue,这样能避免导入不必要的内容,让代码更简洁可控。

内容的提问来源于stack exchange,提问作者user9570858

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:34:01