• 【Python】进程-锁(1)


    #第二题,做一个加减乘除的考试系统,自动出题,自动判对错,并统计结果,一次考试10道题
    import random
    symbols=["+","-","*","/"]
    
    total_count=0
    correct_count=0
    incorrect_count=0
    
    while 1:
        random_number1=random.randint(0,11)
        random_number2=random.randint(0,11)
        random_symbol=random.choice(symbols)
    
        if random_symbol=="/" and random_number2==0:
            continue
        elif random_symbol=="/" and random_number1%random_number2 !=0:
            continue
    
        expression=str(random_number1)+" "+random_symbol+" "+str(random_number2)
        answer=eval(expression)
      
        print expression,"= ",
        while 1:
            try:
                user_answer=int(raw_input(""))
                break
            except:
                print "input is not a number,try again" 
    
        if user_answer==answer:
            print "your answer is right"
            correct_count+=1
            total_count+=1
        else:
            print "your answer is wrong,the right answer is %s" %answer
            incorrect_count+=1
            total_count+=1
        if total_count==3:
            break
    
    print "correct answer is %s" %correct_count
    print "incorrect answer is %s" %incorrect_count
    
    #第三题:计算一个二维矩阵的正对角线、反对角线、周边数之和
    a=[ [1,2,3],
        [4,5,6],
        [7,8,9]
      ]
    
    
    #遍历正对角线
    count=0
    for i in range(len(a)):
        for j in range(len(a[0])):
            if i==j:
                count+=a[i][j]
    print count
    
    #遍历反对角线
    #[0][2]
    #[1][1]
    #[2][0]
    count=0
    column=len(a[0])-1  
    for i in range(len(a)):
        count+=a[i][column-i]
    print count
            
    
    #周边元素和
    #[0][0]
    #[0][1]
    #[0][2]
    #[1][0]
    #[1][2]
    #[2][0]
    #[2][1]
    #[2][2]
    count=0
    for i in range(len(a)):
        for j in range(len(a[0])):
            if i==0 or i==len(a)-1 or j==0 or j==len(a[0])-1:
                print i,j
                count+=a[i][j]
    print count
    
    
    
    #练习:加锁
    from multiprocessing import Process,Lock
    import time
    def lock_lock(lock,num):
        lock.acquire()
        time.sleep(0.2)
        print "hello Num: %s" %num
        lock.release()
    
    if __name__=="__main__":
        lock=Lock()
        for num in range(20):
            p=Process(target=lock_lock,args=(lock,num))
            p.start()
    
    #练习:多进程写一个文件,加锁
    from multiprocessing import Process,Lock
    import time
    
    def write(lock,num):
        lock.acquire()
        with open("e:\text40.txt","a+") as f:
            f.write("wangjing:%s
    " %(num))
        lock.release()
    
    if __name__=="__main__":
        lock=Lock()
        for i in range(5):
            p=Process(target=write,args=(lock,i))
            p.start()
            p.join()
        print "write file done"
    
    
    
    #练习:多把锁
    import multiprocessing
    import time
    def worker(s, i):
      s.acquire()
      print(multiprocessing.current_process().name + " acquire")
      time.sleep(i)
      print(multiprocessing.current_process().name + " release")
      s.release()
    
    if __name__ == "__main__":
      # 设置限制最多3个进程同时访问共享资源
      s = multiprocessing.Semaphore(3)
      for i in range(5):
        p = multiprocessing.Process(target = worker, args = (s, i * 2))
        p.start()
  • 相关阅读:
    数字形式转换
    货币转换
    温度转换
    volatile 的可见性,禁止指令重排序,无法保证原子性的理解
    mysql索引的结构的分析
    史上最详细的ORACLE19c安装说明
    Solaris 修改联网代理的设置
    Oracle Drop表并未直接删除 drop table xx purge
    oracle自定义函数创建函数索引
    连线法合并两个有序链表
  • 原文地址:https://www.cnblogs.com/jingsheng99/p/8735544.html
Copyright © 2020-2023  润新知