我如何配置VScode来像在winpdb中那样调试这个多线程应用程序(我们可以在调用堆栈中看到不同的客户端线程)?
是否可以看到我的主线程执行(我们在线程中,变量,.),以及线程执行(同样的事情在同一时间,并且独立地使用调试器控制台执行线程)?
from socket import *
from fib import fib
from threading import Thread
from concurrent.futures import ProcessPoolExecutor as Pool
pool = Pool(4)
def fib_server(address):
sock = socket(AF_INET, SOCK_STREAM)
sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
sock.bind(address)
sock.listen(5)
while True:
client, addr = sock.accept()
print("Connection", addr)
Thread(target=fib_handler, args=(client,), daemon=True).start()
def fib_handler(client):
while True:
req = client.recv(100)
if not req:
break
n = int(req)
future = pool.submit(fib, n)
result = future.result()
resp = str(result).encode('ascii') + b'\n'
client.send(resp)
print("Closed")
fib_server(('',25000))发布于 2022-06-24 02:19:58
我们可以使用断点进行多线程调试.
我用一个简单的例子向您展示了如何做到这一点:
from threading import Thread
from multiprocessing import Process
import time
def print_num(num):
while 1:
time.sleep(1)
print(num)
def multithread_func():
num = 2
a = [
num,
]
thread = Thread(target=print_num, args=(a,))
thread.start()
while 1:
time.sleep(1)
a[0] = a[0] + 1
def another_process(num):
while 1:
time.sleep(1)
print(f"I'm the second, num is {num}.")
if __name__ == "__main__":
from multiprocessing import Process
process = [
Process(target=multithread_func),
Process(target=another_process, args=(2,)),
]
[p.start() for p in process]
[p.join() for p in process]我们可以在time.sleep (1)之前添加断点:

然后,在使用调试函数时,可以查看每个线程的状态,包括变量和左侧控制线程的按钮。

https://stackoverflow.com/questions/72728979
复制相似问题