当前位置: 首页 > news >正文

做文案策划需要用到的网站拼多多推广引流软件免费

做文案策划需要用到的网站,拼多多推广引流软件免费,网站一般做多大像素,wdcp网站建设目录 一、python多线程 1.1 多线程的作用 1.2 python中的 threading 模块 1.3 线程锁 二、python网络编程 2.1 通过socket访问网络 2.2 python2.x中的编码问题 2.3 python3的编码问题 一、python多线程 1.1 多线程的作用 多线程技术在计算机编程中扮演着重要的角色它主要有以下几个作用 1. **提高程序的响应性**在单线程程序中如果某个操作需要较长时间比如读取大文件或进行复杂计算整个程序会在这段时间内无法响应用户的其他操作。而多线程允许程序在执行耗时操作的同时其他线程可以继续响应用户输入从而提高程序的响应速度和用户体验。 2. **提高资源利用率**现代计算机通常有多个处理器或核心。多线程允许程序同时运行在多个处理器上从而更充分地利用系统资源提高处理速度和效率。 3. **简化程序结构**通过将复杂的任务分解为多个并行的线程可以使程序的逻辑更加清晰和模块化。每个线程负责一部分任务便于管理和维护。 4. **实现并发操作**在某些应用场景中需要同时进行多个独立的任务如服务器处理多个客户端请求、图形界面同时响应用户输入和后台数据处理等。多线程使得这些并发操作成为可能。 5. **提高执行效率**对于可以并行执行的任务多线程可以显著减少总的执行时间。例如在数据处理、图像渲染、科学计算等领域多线程可以大幅提升处理速度。 然而多线程编程也带来了一些挑战如线程同步问题、死锁风险、资源竞争等需要开发者仔细设计和实现以确保程序的正确性和稳定性。 1.2 python中的 threading 模块 Python中用于多线程编程的内置模块是 threading。下面我将详细解释如何使用 threading 模块来启动多线程。 ### 使用 threading 模块启动多线程 1. **导入 threading 模块** import threading 2. **定义线程函数**    这个函数将作为新线程的入口点。 def my_thread_function(arg1, arg2):# 线程执行的代码print(fThread is running with arguments: {arg1}, {arg2}) 3. **创建 Thread 对象**    在创建 Thread 对象时可以传入线程函数和参数。 thread threading.Thread(targetmy_thread_function, args(hello, world)) 4. **启动线程**    调用 start() 方法启动线程。 thread.start() 5. **等待线程完成可选**    如果需要等待线程执行完毕可以调用 join() 方法。 thread.join() ### 完整示例 以下是一个完整的示例展示了如何使用 threading 模块创建和启动多个线程 import threadingdef my_thread_function(arg1, arg2):print(fThread {threading.current_thread().name} is running with arguments: {arg1}, {arg2})# 创建多个线程 threads [] for i in range(5):thread threading.Thread(targetmy_thread_function, args(fhello_{i}, fworld_{i}))threads.append(thread)thread.start()# 等待所有线程完成 for thread in threads:thread.join()print(All threads have finished.) 在这个示例中我们创建了5个线程每个线程执行 my_thread_function 函数并传递不同的参数。最后我们使用 join() 方法确保主线程等待所有子线程完成后再继续执行。 通过这种方式您可以利用 threading 模块在Python中实现多线程编程从而提高程序的并发性和响应性。 1.3 线程锁 在多线程编程中所有线程共享代码和数据资源。这种共享性带来了一个主要风险多个线程可能同时访问和修改同一个变量导致不可预期的结果。为了解决这一问题大多数编程语言提供了锁机制来确保线程安全。 ### 问题代码示例 import threadingg_Num 0def threadProc():global g_Numfor i in range(1000000):g_Num g_Num 1 # 修改数据thread1 threading.Thread(namehello1, targetthreadProc) thread2 threading.Thread(namehello2, targetthreadProc) thread1.start() thread2.start() thread1.join() thread2.join()print(g_Num) 在这个示例中两个线程同时对 g_Num 进行递增操作导致最终打印出来的数字不可预期。 ### 使用锁机制解决问题 为了确保线程安全可以使用锁来保护对 g_Num 的访问。以下是修正后的代码   import threadinglock threading.Lock() g_Num 0def threadProc():global g_Numfor i in range(1000000):lock.acquire() # 获取锁g_Num g_Num 1 # 修改数据lock.release() # 释放锁thread1 threading.Thread(namehello1, targetthreadProc) thread2 threading.Thread(namehello2, targetthreadProc) thread1.start() thread2.start() thread1.join() thread2.join()print(g_Num) 通过使用锁我们确保在任何时刻只有一个线程能够进入锁定范围并修改 g_Num从而避免了竞态条件确保最终结果的可预期性。 二、python网络编程 2.1 通过socket访问网络 Python 提供了两种不同层次的网络服务接口 1. **低级网络服务**这一层支持基本的 Socket 功能它实现了标准的 BSD Sockets API允许开发者访问底层操作系统 Socket 接口的所有方法从而进行更底层的网络操作。 2. **高级网络服务**这一层包含模块 SocketServer它提供了一系列服务器中心类旨在简化网络服务器的开发过程使得开发者能够更快速地构建网络应用。 **什么是 Socket** Socket又称为“套接字”是应用程序用于网络通信的一种抽象。通过 Socket应用程序可以发送请求或响应网络请求实现不同主机间或同一台计算机上不同进程间的通信。Socket 是网络编程的基础它封装了复杂的网络通信细节使得开发者能够更容易地编写网络应用程序。 socket()函数 Python 中我们用 socket函数来创建套接字语法格式如下 socket.socket([family[, type[, proto]]]) 参数 family: 套接字家族可以使 AF_UNIX 或者 AF_INET。type: 套接字类型可以根据是面向连接的还是非连接分为 SOCK_STREAM 或 SOCK_DGRAM。protocol: 一般不填默认为 0。 Socket 对象(内建)方法 简单示例如下 服务端代码 # 导入 socket 模块 import socketdef main():print(~~~~~服务端启动~~~~~)# 1. 创建 socketsSock socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2. 绑定sSock.bind((192.168.1.125, 1234)) # IP地址 可用本地IP测试: 127.0.0.1# 3. 监听sSock.listen(5)# 4. 处理连接cSock, addr sSock.accept()print(客户端连接成功)cSock.send(str(欢迎:).encode(utf-8))# 5、6 发送、接收数据while True:print(cSock.recv(1024).decode(utf-8))inStr input(: )if inStr quit:breakcSock.send(str(inStr).encode(utf-8))# 7. 关闭套接字cSock.close()sSock.close()if __name__ __main__:main() 客户端代码 # 导入 socket 模块 import socketdef main():print(~~~~~客户端启动~~~~~)# 1. 创建 socketcSock socket.socket()# 2. 连接服务器host 192.168.1.125 # IP地址 可用本地IP测试: 127.0.0.1port 1234 # 设置端口号cSock.connect((host, port))# 3、4 发送、接收数据while True:print(cSock.recv(1024).decode(utf-8))inStr input(: )if inStr quit:breakcSock.send(str(inStr).encode(utf-8))# 5. 关闭套接字cSock.close()if __name__ __main__:main() 2.2 python2.x中的编码问题 在Python 2.x版本中存在两个主要的字符串类unicode 和 str它们都继承自 basestring。 str 类是带编码的默认情况下使用 ASCII 编码。因此如果你的程序中包含中文字符串默认情况下会报错。可以通过设置Python 2中的字符默认编码来解决这个问题。 # coding:utf-8 # 默认使用UTF-8编码# coding:gbk # 默认使用GBK编码 unicode 类是不带编码的用于表示已知文明中的任何一个字符。需要注意的是unicode 并不是一种编码方式。  示例 ul u中国 # 字符串 unicode类型print ul # 输出: u\u4e2d\u56fdprint len(ul) # 输出: 2u2 uhelloprint u2 # 输出: uhelloprint len(u2) # 输出: 5sl 中国 # str 类型字节串print sl # 输出: \xd6\xd0\xb9\xfa中文 GBK 编码控制台不指定中文默认 GBKprint len(sl) # 输出: 4s2 helloprint s2 # 输出: helloprint len(s2) # 输出: 5 在Python 2中可以在字符串和字节串之间进行转换 - encode将字符串按指定方式进行编码转换成字节流str存放在内存中。 - decode将字节流按指定方式进行解码转换成字符串unicode用于显示。 可以使用 chardet 模块来判断字节流的编码 import chardet raw u12AB好 print chardet.detect(raw.encode(utf-8)) # 输出: {encoding: utf-8, confidence: 0.99} print chardet.detect(raw.encode(gbk)) # 输出: {encoding: GB2312, confidence: 0.99} 在C中多字节集通常是GBK编码而宽字节集是UTF-16编码。字符使用哪种方式进行编码就应该使用哪种方式进行解码。以下是几种常见情况1. C端发送过来的是GBK编码我们需要显示那么应该使用 decode(GBK) 转换成 unicode 便于显示。2. C端发送过来的是UTF-16编码我们需要显示那么应该使用 decode(UTF-16) 转换成 unicode 便于显示。3. C端发送过来的数据需要Python端转发到其他C端不需要转换。4. Python端要直接给C端发送字符串那么应该根据C端使用多字节集还是宽字节集使用 encode(GBK) 或者 encode(UTF-16) 之后再发送给C端。5. 如果你直接使用字节串那么应该先使用 decode(UTF-8) 转换成 unicode再使用 encode(GBK) 或者 encode(UTF-16) 再发送给C端。 示例代码 c端代码 #include iostream #include winsock2.h #include ws2tcpip.h#pragma comment(lib, ws2_32.lib)// 数据包 1024 4 4 1032 struct NETMSGINFO {int MSGTYPE; // 消息类型int nMsgLen; // 消息大小char szMsgBuff[1024]; // 消息内容 };int main() {// 1. 初始化环境WSADATA wsd {};if (WSAStartup(MAKEWORD(2, 2), wsd) ! 0) {std::cerr WSAStartup failed! std::endl;return 1;}// 2. 创建套接字SOCKET sock socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (sock INVALID_SOCKET) {std::cerr socket creation failed! std::endl;WSACleanup();return 1;}// 3. 连接sockaddr_in addr {};addr.sin_family AF_INET;addr.sin_port htons(0x1234);addr.sin_addr.s_addr inet_addr(127.0.0.1);if (connect(sock, (sockaddr*)addr, sizeof(addr)) SOCKET_ERROR) {std::cerr connect failed! std::endl;closesocket(sock);WSACleanup();return 1;}// 4. 发送数据NETMSGINFO netbuf {};netbuf.MSGTYPE 1; // 可以用宏代替上线strcpy_s(netbuf.szMsgBuff, 1024, xxx:上线了);netbuf.nMsgLen strlen(netbuf.szMsgBuff); // 字符长度注意Python中字符不以0结尾if (send(sock, (char*)netbuf, sizeof(netbuf), 0) SOCKET_ERROR) {std::cerr send failed! std::endl;closesocket(sock);WSACleanup();return 1;}// 5. 接收数据if (recv(sock, (char*)netbuf, sizeof(netbuf), 0) SOCKET_ERROR) {std::cerr recv failed! std::endl;closesocket(sock);WSACleanup();return 1;}std::cout netbuf.szMsgBuff std::endl;// 6. 清理环境closesocket(sock);WSACleanup();return 0; } python端代码 import socket import structdef main():# 创建TCP套接字sock socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定端口sock.bind((127.0.0.1, 0x1234))# 监听sock.listen(socket.SOMAXCONN)# 等待连接clientsock, addr sock.accept()print(fConnection from {addr})# 获取消息大小是发送数据结构大小Msg clientsock.recv(1032)# 进行格式拆包由于字符长度不确定暂时不解包消息msgtype, nMsgLen struct.unpack(ii, Msg[0:8])# 第二次根据长度解包指定解包字符长度使用切片方式msgbuff, struct.unpack(f{nMsgLen}s, Msg[8:8nMsgLen])# 字符需要进行解码因为VS中默认是以GBK编码方式print(msgbuff.decode(gbk))# 回复客户端消息构建一个数据包# 这个数据需要进行GBK编码否则VS中解析不了字符sendbug 你好\n.encode(gbk)# 打包数据msg struct.pack(ii1024s, 0, len(sendbug), sendbug)# 发送数据clientsock.send(msg)# 关闭套接字clientsock.close()sock.close()if __name__ __main__:main() 2.3 python3的编码问题 在Python 3中默认使用UTF-8编码并且明确区分了文本字符和二进制数据分别用str和bytes类型表示。 s1 abc # str类型字符串 s2 babc # bytes类型二进制字节流 s1 中国 # str类型字符串 s2 b中国 # bytes类型不支持非ASCII字符这样会报错 在Python 2中str类型在Python 3中对应bytes类型表现为字节转换是通过encode方法用于存储。 在Python 2中Unicode类型在Python 3中对应str类型表现为字符转换是通过decode方法用于显示。 encode和decode方法用于在str和bytes之间进行转换。 示例 s 18CM好棒 print(s.encode()) # 默认使用UTF-8编码 # 输出: b18CM\xe5\xa5\xbd\xe6\xa3\x92 print(s.encode(gbk)) # 使用GBK编码 # 输出: b18CM\xba\xc3\xb0\xb2print(b18CM\xe5\xa5\xbd\xe6\xa3\x92.decode()) # 默认使用UTF-8解码 # 输出: 18CM好棒 print(b18CM\xba\xc3\xb0\xb2.decode(gbk)) # 使用GBK解码 # 输出: 18CM好棒 需要注意的是encode和decode方法的默认参数都是UTF-8。
http://www.hkea.cn/news/14270492/

相关文章:

  • 营商环境建设监督局网站网站开发毕业设计指导记录
  • 网站制作软件大全南宁建设学院官网
  • server 2012 做网站深圳宝安区天气预报
  • 学做室内效果图的网站个人网站申请空间
  • 建立网站大概投入互联网行业前景
  • 海淀做网站的网络公司电子商城网站建设方案
  • 小学英语教师做应用相关网站陕西省网站备案
  • 网站建设主要学什么软件17一起做网店网站
  • 三合一网站建站南京百度seo公司
  • 手机网站建设西安做网站哪个行业比较有前景
  • 吉林市网站建设清远手机网站建设
  • 公司网站建设劳伦阿里云支持wordpress
  • 长沙电信网站备案互联网
  • 手机网站会员中心模板下载做网站的基本流程
  • 广州建设行业信息网站sem是什么意思
  • 如何提升网站的收录量seo官网制作规划
  • 麻阳建设局网站网站制作公司网址
  • 企业网站管理系统 软件著作权电商推广技巧
  • 装修网站设计图推荐宝塔建站网址
  • 门户网站好处4000套微信小游戏源码
  • 网站开发怎么学唐山万唯网络科技有限公司
  • 网站建设 6万元怎样建设网站免费
  • 简单做网站的软件外国网站后台设计
  • 淘客手机网站模板wordpress discuz整合
  • 嘉兴路街道网站建设网站研发公司
  • 网站建设网页设计WordPress判断设备
  • 谁知道做网站的电话南通建设公司网站
  • 招生网站模板网络营销师报考条件
  • 安徽住房与城乡建设部网站网站设计作品案例讲解
  • 广州哪个区最大google企业网站seo