Git的使用及网络编程多线程多进程

Git的使用

1.打开CMD命令行,输入cd Desktop进入桌面

2.输入 mkdir + ‘file name’创建文件,如果已有项目则输入 cd + file name进入文件,如果在Git上已有项目并且在已有项目进行修改,则输入cd clone + url

3.如果第一次使用,则先初始化,git init

4. git add + file name 把项目加入文件夹里面

5.git config -global 全局设置(第一次使用的时候设置)

6. git log 查看日志、git reset + 版本(回到某个版本)、git rm 删除文件、git pull 先把服务器已有的东西下载本地再去push

7. git remote add origin + url 和 git push -u origin master 对文件进行上传

8.其它命令:git branch + file name建立新的分支、git checkout + ‘file name‘切换到新的分支、git merge + ‘file name‘合并两个分支、git branch -d ‘file name‘删除分支

多线程多进程

进程-操作系统分配内存的基本单位,进程见的内存是相互隔离的。对于操作系统来说,一个正在执行的任务就是一个进程,每个进程都有自己的地址空间、内存、数据栈以及其他记录其运行轨迹的辅助数据。操作系统管理在其上运行的所有进程,并为这些进程公平地分配时间。不过各个进程有自己的内存空间、数据栈等,所以只能使用进程间的通信(Inter-Process Communication, IPC),而不能直接共享信息。

线程-在一个进程内部,要同时干多件事,就需要同时运行多个‘子任务‘,我们把进程内的这些‘子任务‘称为线程(Thread)。一个进程中的各个线程之间共享一片数据空间,所以线程之间可以比进程之间更为方便地共享数据以及相互通信。在进程的整个运行过程中,每个线程都只做自己的事,在需要的时候跟其他的线程共享运行的结果。

threading模块包含了一个易于实现的锁机制,可以用于同步线程。可以通过调用Lock()方法来创建一个新的锁,这个方法将返回一个锁对象。锁对象拥有一个accquire(blocking)方法,可以强制线程进行同步的工作。其中可选的blocking参数能够控制线程在尝试获得锁时是否等待。blocking参数设置为0时,线程若无法获得锁,则立即返回0;blocking设置为1时,线程若无法获得锁,则会被阻塞等待锁的释放。线程可以通过release()方法来释放一个不再需要的锁。

网络编程

from socket import socket, AF_INET, SOCK_STREAM
import datetime
# stream 是tcp,DGRAM是udp

def main():
    # 创建一个基于TCP协议的套接字对象
    # 因为我们做的是应用级的产品或服务,所以可以利用现有的传输服务来实施数据传输
    server = socket(AF_INET, SOCK_STREAM)     # 表示用的ipv4的地址(固定写法)两个参数可写可不写
    server.bind((‘10.7.189.130‘, 6663)) # 绑定IP地址(网络上主机身份标识)和本机端口(用来区分不同服务ip地址的扩展)
    # 开始监听客户端的连接
    server.listen(512)                           # 队列的大小,最多排512个
    print(‘服务器已经启动,正在监听‘)
    while True:
        client, addr = server.accept() # 通过accept方法接受客户端的连接
        # accept 方法是个阻塞式方法,如果没有客户端连上来,那么accept方法就会让代码阻塞
        # 直到有客户端连接成功才会有成功
        # accept 方法返回一个元组,元组中第一个值代表客户端的对象
        # 第二个值又是一个元组,其中有客户端的ip地址和端口
        currenttime = datetime.datetime.now()
        print(addr, ‘连接成功‘)
        # client.send(‘hello‘.encode(‘utf-8‘))
        client.send(currenttime.__str__().encode(‘utf-8‘))
        client.close()

if __name__ == ‘__main__‘:
    main()
# 连接
from socket import socket

def main():
    client = socket()
    client.connect((‘10.7.189.118‘, 6789))
    data = client.recv(512)
    print(data.decode(‘utf-8‘))

聊天室的服务端

from socket import socket
from threading import Thread

def main():

    class RefreshScreenThread(Thread):
        def __init__(self, client):
            super().__init__()
            self._client = client

        def run(self):  # 负责刷屏
            while True:
                data = self._client.recv(1024)
                print(data.decode(‘utf-8‘))

    nickname = input(‘请输入你的昵称:‘)
    myclient = socket()
    myclient.connect((‘10.7.189.130‘, 11110))
    RefreshScreenThread(myclient).start()
    running = True
    while running:
        content = input(‘请发言:‘)
        if content == ‘byebye‘:
            myclient.send(content.encode(‘utf-8‘))
            running == False
        else:
            msg = nickname + ‘:‘ + content
            myclient.send(msg.encode(‘utf-8‘))

if __name__ == ‘__main__‘:
    main()

聊天室的客户端

from threading import Thread
from socket import socket

def main():
    class ClientHandler(Thread):

        def __init__(self, client):
            super().__init__()
            self._client = client

        def run(self):
            while True:
                try:
                    data = self._client.recv(1024)  # 把数据接受下来直接发给别人,不用decode
                    if data.decode(‘utf-8‘) == ‘byebye‘:  # 用户说byebye后主动断开连接
                        client.remove(self._client)
                        self._client.close()
                        break
                    else:
                        for client in clients:
                            # if client != self._client:  # 如果不想自己发给自己的话
                            client.send(data)
                except Exception as e:
                    print(e)
                    client.remove(self._client)  # 发生异常就移除这个客户端
                    break

    server = socket()
    # 命令行参数 sys.argv
    server.bind((‘10.7.189.130‘, 11110))
    server.listen(1024)
    clients = []    # 用于存多个客户连接进来,并记录信息保存在这个容器里面
    while True:
        curr_client, addr = server.accept()  # 接收用户请求
        print(addr[0])
        clients.append(curr_client)  # 如果在while里面进行收发消息,别人就无法连入聊天室
        # 所以起线程处理数据
        ClientHandler(curr_client).start()

if __name__ == ‘__main__‘:
    main()

原文地址:https://www.cnblogs.com/charlieyucao/p/8639350.html

时间: 2024-11-08 04:52:50

Git的使用及网络编程多线程多进程的相关文章

python之网络编程-多线程

多线程 线程的理论知识 什么是线程 当开启一个进程的时候:内存中开辟空间,加载资源与数据,调用CPU执行,可能还会使用这个空间的资源. 定义:每个进程都有一个地址空间,而且默认就有一个控制线程.进程只是把资源集中到一起(进程可以认为是一个含有代码的空间),而线程才是CPU的执行单位. 多线程:在一个进程中存在多个控制线程,多个控制线程共享该进程的地址空间. 线程vs进程 开启多进程开销大,开启线程开销非常小 开启多进程的速度慢,开启多线程速度快 进程之间数据不能直接共享(通过队列可以),同一个进

C/C++网络编程7——多进程服务器端之fork函数

通过前面几节的内容,我们已经可以实现基本的C/S结构的程序了,但是当多个客户端同时向服务器端请求服务时,服务器端只能按顺序一个一个的服务,这种情况下,客户端的用户是无法忍受的.所以虚实现并发的服务器端. 并发服务器端的实现方法: 1:多进程服务器端:通过创建多个进程提供服务. 2:多路复用服务器:用过捆绑并统一管理I/O对象提供服务. 3:多线程服务器:通过生成与客户端等量的线程提供服务. 多进程服务器端: 进程:可执行程序的一次执行过程. 在linux下可通过fork()函数创建一个进程. #

java网络编程——多线程数据收发并行

基本介绍与思路 收发并行 前一篇博客中,完成了客户端与服务端的简单TCP交互,但这种交互是触发式的:客户端发送一条消息,服务端收到后再回送一条.没有做到收发并行.收发并行的字面意思很容易理解,即数据的发送与接收互相不干扰,相互独立.当然,要保证服务端和客户端都能做到收发并行. 业务逻辑 脱离业务逻辑的实践是毫无意义的,先描述一下本实践中的业务逻辑:一个服务端接受多个客户端的连接,连接后,向各个客户端定时发送时间戳数据,同时在并行条件下,接受各个客户端发送来的数据并显示:客户端键盘输入字符串,发送

网络编程--多线程 , socketserver

内容补充 python2与python3的区别? """ python3对unicode字符的原生支持 Python2中使用ASCII码作为默认编码方式导致string有两种类型str和Unicode , Python3只支持Unicode的string """ """ py2: unicode v = u"root" 本质上用Unicode存储 (str/bytes) v = "roo

python 网络编程-02 多进程的交互案例

server.py import socket from threading import Thread def Server(): server = socket.socket() server.bind(('127.0.0.1', 8000)) server.listen(5) while True: conn, addr = server.accept() Thread(target=talk,args=[conn,]).start() def talk(connect): while T

Python多线程多进程那些事儿看这篇就够了~~

自己以前也写过多线程,发现都是零零碎碎,这篇写写详细点,填一下GIL和Python多线程多进程的坑~ 总结下GIL的坑和python多线程多进程分别应用场景(IO密集.计算密集)以及具体实现的代码模块. 目录   0x01 进程 and 线程 and “GIL” 0x02 python多线程&&线程锁&&threading类 0x03 python队列代码实现 0x04 python之线程池实现 0x05 python多进程并行实现 0x01 进程 and 线程 and “

黑马程序员_JAVASE_网络编程上

网络模型: OSI模型 TCP/IP模型 网络通信要素 ip地址 端口 通信协议 通信过程 1.找到对方IP地址 2.数据要发送到对方指定的应用程序上,为了标识这些应用程序,用唯一的数字进行标识,这些数字符号就是端口 3.定义通信规则,tcp还是udp还是其他 应用层协议 http,ftp,smtp 解析主机地址: InetAddress ia = InetAddress.getByName("www.baidu.com"); String ip = ia.getHostName();

0730------Linux网络编程----------服务器端模型(迭代,多进程,多线程,select,poll,epoll 等)

1.迭代服务器模型 1.1 迭代服务器是处理多个请求时一种最简单直接的思路,即使用while循环,它不具有并发能力,即必须一个一个的处理客户的请求. 1.2 程序示例. #include "def.h" int listenfd_init(); //返回一个处于监听状态的套接字描述符 void do_service(int peerfd); // 处理客户端的请求 int main(int argc, const char *argv[]) { if(signal(SIGPIPE, S

【LINUX/UNIX网络编程】之简单多线程服务器(多人群聊系统)

RT,Linux下使用c实现的多线程服务器.这个真是简单的不能再简单的了,有写的不好的地方,还希望大神轻拍.(>﹏<) 本学期Linux.unix网络编程的第四个作业. 先上实验要求: [实验目的] 1.熟练掌握线程的创建与终止方法: 2.熟练掌握线程间通信同步方法: 3.应用套接字函数完成多线程服务器,实现服务器与客户端的信息交互. [实验内容] 通过一个服务器实现最多5个客户之间的信息群发. 服务器显示客户的登录与退出: 客户连接后首先发送客户名称,之后发送群聊信息: 客户输入bye代表退