zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    类型参数化
    scala 集合类型
    scala 列表List
    统计HDFS 上字节数据统计
    用scala 实现top N 排名
    scala 基础笔记
    Java 设计模式之 装饰者模式
    通过java api 读取sql 中数据(查询)
    leetcode 34. Search for a Range
    canvas画简单电路图
  • 原文地址:https://www.cnblogs.com/charlieyucao/p/8639350.html
Copyright © 2011-2022 走看看