import asyncio import functools async def compute(x, y): print(f'compute:{x}+{y}...') await asyncio.sleep(1) return x + y async def print_sum(x, y): # 创建task task = asyncio.create_task(compute(x, y)) # 底层 # task绑定事件函数 task.add_done_callback(functools.partial(end, x, y)) await asyncio.sleep(1) def end(n, m,t): # result = await compute(x,y) print(f'{n}+{m}={t.result}') if __name__ == '__main__': loop = asyncio.get_event_loop() loop.run_until_complete(print_sum(1, 2)) loop.close()
老师能把这个程序的流程叙述一遍吗 我调试了一下感觉还是不太懂
老师,这个相当于全双工吗?能够两边同时收发?
#coding=utf-8 from socket import * from threading import Thread def recv_data(): while True: recv_data = client_socket.recv(1024) # 接收的最大字节数 print(f"客户端的消息:{recv_data.decode('gbk')}") if recv_data == "end": break def send_data(): while True: msg = input("请输入消息:") client_socket.send(msg.encode('gbk')) if __name__ == '__main__': server_socket = socket(AF_INET,SOCK_STREAM)#建立TCP套接字 server_socket.bind(("127.0.0.1",8899)) server_socket.listen(5) print("等待接收连接") client_socket,client_info = server_socket.accept() print('一个客户端建立连接成功') t1=Thread(target=recv_data()) t2=Thread(target=send_data()) t1.start() t2.start() t1.join() t2.join() client_socket.close() server_socket.close()
我的服务端只能接收 没法发送消息
import asyncio import functools async def compute(x,y): print(f'compute:{x}+{y}....') await asyncio.sleep(1) return x+y async def print_sum(x,y): # 创建task task = asyncio.create_task(compute(x,y)) #python3.7以上写法 # task绑定回调函数 task.add_done_callback(functools.partial(end,x,y)) #python3.7以上写法 # 释放下cpu的使用 await asyncio.sleep(0) def end(n,m,task): print(f'{n}+{m}={task.result()}') if __name__ == "__main__": loop = asyncio.get_event_loop() loop.run_until_complete(print_sum(1,2)) loop.close()
老师 这里task创建了一个任务计算x+y,下面的绑定回调函数是什么意思,为什么要绑定,以及绑定了之后怎么还要睡眠一秒,如果是0秒的话显示Task was destroyed but it is pending!我听不懂视频里的老师的表达,麻烦这里老师文字详细解释下
这里为什么会出现一个b ?
#coding=utf-8 import threading from socket import * import time def ReceiveData(): r = socket(AF_INET,SOCK_DGRAM) r.bind(("192.168.0.104",7890)) if a.acquire(): while True: rec_data = r.recvfrom(1204) print(rec_data[0].decode()) time.sleep(1) b.release() def SendData(): s = socket(AF_INET, SOCK_DGRAM) if b.acquire(): while True: data = input("请输入:") s.sendto(data.encode(), ("192.168.0.104",7890)) time.sleep(1) a.release() if __name__ == "__main__": a = threading.Lock() b = threading.Lock() b.acquire() t1 = threading.Thread(target=ReceiveData) t2 = threading.Thread(target=SendData) t1.start() t2.start()
老师,我写的聊天室的程序,达不到效果,麻烦看一下哪里出错了
老师你好,为什么在pycharm这里会出现这种情况,在vscode就可以正常显示,这个跟python版本没关系吧,我看视频中老师的版本都是3.5之后的。
import asyncio import functools async def compute(x, y): print(f'compute:{x}+{y}....') await asyncio.sleep(1) return x+y async def print_sum(x, y): # 创建task task = asyncio.create_task(compute(x, y)) # task绑定回调函数 task.add_done_callback(functools.partial(end, x, y)) # 释放下cpu的使用 await asyncio.sleep(1) def end(n, m, t): print(f'{n}+{m}={t.result()}') if __name__ == "__main__": loop = asyncio.get_event_loop() loop.run_until_complete(print_sum(1, 2)) loop.close()
老师我想问下,这里的t.result()的作用是什么呢
from time import sleep from threading import Thread #类实现多线程 class MyThread(Thread): def __init__(self,name): Thread.__init__(self) self.name=name def run(self): print(f"Threading:{self.name} start") sleep(3) #创建线程 t1=MyThread('t1') t2=MyThread('t2') #启动线程 t1.start t2.start
我这里运行代码没有反应是怎么回事呢?
from socket import * s=socket(AF_INET,SOCK_DGRAM) s.bind(("",8083)) s.sendto("hello".encode("gb2312"),("172.17.104.155",8080)) sedata=s.recvfrom(1024) print(sedata[0].decode("gb2312")) s.close()
为啥我这个报错呀
from threading import Thread #线程的实线 #方法包装 #创建普通方法 def func1(name): print(f"Threading:{name} start") #创建线程 t1=Thread(target=func1,args=('t1',)) t2=Thread(target=func1,args=('t2',)) #开始线程 t1.start() t2.start() #func1('t1') #func1('t2')
老师没明白这里的next()函数是用来干嘛的??????????????????????????
from threading import Thread,BoundedSemaphore from time import sleep def an_JIan(number): renshu.acquire() print(f"第{number}个人在安检") sleep(3) renshu.release() if __name__ == '__main__': renshu=BoundedSemaphore(3) for x in range(10): t1=Thread(target=an_JIan,args=(f'{x+1}',)) t1.start()
#老师我的运行结果每次不一样是怎么回事呢
'''
第1个人在安检
第2个人在安检
第3个人在安检
第4个人在安检
第6个人在安检
第5个人在安检
第8个人在安检
第7个人在安检
第9个人在安检
第10个人在安检
进程已结束,退出代码为 0
第二种如下:
老师您好
如下图所示,为什么报错threading中没有Thread这个属性呢
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637