`

python 锁

 
阅读更多

#!/usr/bin/env python

#!coding=utf-8

 

#锁定操作

 

import socket , traceback , os, sys, fcntl, time

import signal

#fcntl

 

 

"""

flock(FH,LOCK_EX|LOCK_SH|LOCK_UN)

LOCK_EX 独占锁,排他锁

LOCK_SH 共享锁

LOCK_UN 对文件解锁

"""

def getlastaccess(fd , ip):

    fcntl.flock(fd, fcntl.LOCK_SH)  #

 

    try:

        fd.seek(0)

        for line in fd.readlines():

            fileip , assesstime = line.strip().split("|")

            if fileip == ip:

                return assesstime

        return None

    finally:

        print"in getlastaccess finally"

        fcntl.flock(fd, fcntl.LOCK_UN) #解除锁,释放锁

 

 

def writelastaccess(fd, ip):

    print fcntl.flock(fd, fcntl.LOCK_EX)

    records = []

    try:

        fd.seek(0)

        for line in fd.readlines():

            fileip , accesstime = line.strip().split("|")

            if fileip!=ip:

                records.append((fileip,accesstime))

        fd.seek(0)

        for fileip , accesstime in records + [(ip , time.asctime())]:

            fd.write("%s|%s\n" %(fileip, accesstime))

        fd.truncate()

    finally:

        print "in writelastaccess finally "

        fcntl.flock(fd, fcntl.LOCK_UN)

 

 

 

def reap(signum , stackframe):

    while 1:

        try:

            result = os.waitpid(-1, os.WNOHANG)

            if not result[0]:

                break

        except:

            break

        print "reaped child process %d"%(result[0])

 

 

host=''

port = 9002

 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

s.bind((host, port))

s.listen(1)

 

fd = open("lastaccess.txt", "w+")

 

while 1:

    try:

        clientsock, clientaddr = s.accept()

    except KeyboardInterrupt:

        raise

    except:

        traceback.print_exc()

        continue

 

 

    signal.signal(signal.SIGCHLD, reap)

 

    pid = os.fork()

 

    if pid:

        clientsock.close()

        continue

    else:

        s.close()

 

    try:

        print "got connection from %s ,servicing with pid %d"%\

        (clientsock.getpeername(), os.getpid())

        ip = clientsock.getpeername()[0]

        clientsock.sendall("welcome ,%s \n" % ip)

        last = getlastaccess(fd, ip)

 

        if last:

            clientsock.sendall("i last saw you at %s.\n" %last)

        else:

            clientsock.sendall("i've never seen you before.\n")

        writelastaccess(fd, ip)

        clientsock.sendall("i have noted your connection at %s.n"%\

         getlastaccess(fd, ip))

    except (KeyboardInterrupt, SystemExit):

        raise

    except:

        traceback.print_exc()

 

    #time.sleep(10)

    try:

        clientsock.close()

 

    except KeyboardInterrupt:

        raise

    except:

        traceback.print_exc()

    sys.exit()

 

 

分享到:
评论

相关推荐

    python 锁的使用 python锁的使用例程python2可以直接运行,提供示例程序,供学习参考

    Python 锁的使用 在多线程编程中,同步机制是至关重要的,它确保了对共享资源的有序访问,防止数据竞争和不一致状态的发生。Python 提供了多种同步工具,其中最基础的是锁(Lock),它能确保同一时刻只有一个线程...

    python在windows锁屏的代码

    python在windows锁屏的代码,只要环境安装好了,切换到脚本目录下,就可以锁屏你的计算机,请多多支持,谢谢!

    浅谈python锁与死锁问题

    ### 浅谈Python锁与死锁问题 #### 一、引言 锁是多线程编程中的重要概念,用于同步不同线程之间的访问,确保共享资源的安全性。Python中的锁机制能够有效地帮助开发者处理并发环境下的资源共享问题。本文将详细...

    python3+pyqt5 源码 屏幕锁挂机锁

    python3+pyqt5 源码 python挂机锁源码网络上不多,很有参考价值 注释超多,一看就懂 屏蔽按键 窗口背景更换 窗口透明设置 文件包含源码 及打包好的exe,背景图片 一个py文件,一个窗口搞定,不浪费资源。

    TimeLock(Python语言时间锁)

    **时间锁程序(TimeLock)**是基于Python编程语言实现的一种安全机制,它允许用户对文件或程序设置一个时间限制,只有当达到预设的特定日期时,才能访问或执行这些内容。这种功能在创建惊喜礼物、保密项目或限时活动...

    Python代码安装程序体验锁

    "Python代码安装程序体验锁"是一个针对此问题的解决方案,尤其适用于私活项目。它允许开发者为交付给客户的程序添加一层安全防护,使得客户在初次使用时可以有一定的体验次数,一旦体验次数用尽,就需要进行购买或者...

    解除文件占用,强制删除 Unlocker V1.9.2

    当你重命名或删除一个文件/文件夹时,Windows 弹出对话框提示你“无法删除 xxx:它正在被其它用户/程序使用!”,怎么办?使用 Unlocker 你就可以轻松、方便、有效地解决这个虽小但很烦人的问题!...

    Python中Selenium模拟JQuery滑动解锁实例.pdf

    在Python自动化测试领域,Selenium库是一个广泛使用的工具,它允许开发者模拟用户行为来测试Web应用。本文将深入探讨如何使用Selenium和JQuery在Python中实现滑动解锁功能。滑动解锁通常用于增强移动应用或网页的...

    python使用锁访问共享变量实例解析

    本文研究的主要是python使用锁访问共享变量,具体介绍和实现如下。 python 做多线程编程时,多个线程若同时访问某个变量,可能会对变量数据造成破坏,pyhon中的threading模块提供了lock对象,lock中的acquire方法...

    Python 滑动解锁项目

    我们通过selenium 的webdriver来实现滑动解锁,主要依赖PIL库实现图片比对

    python3之多线程及线程锁的基础用法

    ### Python3之多线程及线程锁的基础用法 #### Python 多线程库简介 Python 提供了两种方式来支持线程:_thread 和 threading。其中,_thread 库提供了一个较为基础且底层的支持,它包含了创建简单线程的基本功能...

    redlock-py, 在 python 中,Redis分布式锁.zip

    redlock-py, 在 python 中,Redis分布式锁 redlock - python 中的分布式锁这个 python 库实现了基于redis的分布式锁管理器算法( ) 。要创建锁定管理器:dlm = Redlock([{"host":"localhost","port":

    pdf remover(解锁pdf)

    很好用的软件,能解锁被锁住的pdf,实现和pdf修改和打印

    电脑屏幕保护锁

    电脑屏幕保护锁

    Python源码剖析(含目录+Small Python源码)

    9. **并发与并行**:讲解Python的线程、进程和异步编程模型,如GIL(全局解释器锁)的影响和解决策略。 10. **扩展Python**:讨论如何用C或C++编写Python扩展模块,以实现Python与C的交互。 通过这本书,读者不仅...

    Android屏幕解锁图案破解 Python代码

    Android屏幕解锁图案破解 Python代码

    Python面试宝典(完整版),python程序员面试宝典pdf,Python

    面试者应了解Python的性能瓶颈,如GIL(全局解释器锁)的影响,以及如何使用cProfile等工具分析和优化代码性能。 通过深入学习和理解《Python面试宝典》中的知识点,并结合实际编程经验,Python程序员可以在面试中...

    华为出品-Python基础入门教程-可爱的Python 共86页.ppt

    需要注意的是,由于全局解释器锁(GIL),Python的多线程在CPU密集型任务上可能不如多进程有效。 【Python中的socket编程】 Python的socket模块用于网络通信,可以创建客户端和服务器端的套接字,实现TCP和UDP协议...

    Python高性能编程_python进阶_python高性能_

    7. **多线程与多进程**:Python的全局解释器锁(GIL)限制了多线程并行执行,但可以通过多进程实现真正的并行。了解何时使用threading模块,何时使用multiprocessing模块,以及如何利用concurrent.futures框架。 8. *...

Global site tag (gtag.js) - Google Analytics