#!/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在windows锁屏的代码,只要环境安装好了,切换到脚本目录下,就可以锁屏你的计算机,请多多支持,谢谢!
主要介绍了python锁与死锁问题,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
python3+pyqt5 源码 python挂机锁源码网络上不多,很有参考价值 注释超多,一看就懂 屏蔽按键 窗口背景更换 窗口透明设置 文件包含源码 及打包好的exe,背景图片 一个py文件,一个窗口搞定,不浪费资源。
当你重命名或删除一个文件/文件夹时,Windows 弹出对话框提示你“无法删除 xxx:它正在被其它用户/程序使用!”,怎么办?使用 Unlocker 你就可以轻松、方便、有效地解决这个虽小但很烦人的问题!...
本文研究的主要是python使用锁访问共享变量,具体介绍和实现如下。 python 做多线程编程时,多个线程若同时访问某个变量,可能会对变量数据造成破坏,pyhon中的threading模块提供了lock对象,lock中的acquire方法...
我们通过selenium 的webdriver来实现滑动解锁,主要依赖PIL库实现图片比对
很好用的软件,能解锁被锁住的pdf,实现和pdf修改和打印
时间锁程序,可以设置指定的时间才能打开文件,适用于生日礼物,只能到生日当天才能打开程序。注意打开批处理文件,里面的日期要改改。
Python中Selenium模拟JQuery滑动解锁实例
redlock-py, 在 python 中,Redis分布式锁 redlock - python 中的分布式锁这个 python 库实现了基于redis的分布式锁管理器算法( ) 。要创建锁定管理器:dlm = Redlock([{"host":"localhost","port":
电脑屏幕保护锁
Android屏幕解锁图案破解 Python代码
《python3之多线程及线程锁的基础用法》线程的基本用法
python面试常见问题1、“==”与is的区别2、list与tuple的区别3、python中list与dict4、局部变量和全局变量5、迭代器和生成器6、yield7、import...解释器锁14、python2和python3的区别15、提高python运行效率的方法16、类...
Python解决不死锁的哲学家问题,图形界面
├─千锋Python教程:第01章 第一个Python程序与数据存储及数据类型(9集) │ │ .DS_Store │ │ │ ├─code │ │ 1、数据存储.txt │ │ 2、第一个python程序.py │ │ 3、注释.py │ │ 4、输出与输入.py │ ...
python版本3.5.4 问题分析:登录+滑动解锁 其实登录账号的部分本来很简单,用selenium打开QQ邮箱官网:https://mail.qq.com 然后切换frame输入帐号 和密码点击登录即可,但是部分账号,或者可以说是异地登录的QQ账号...
6. 多线程编程:介绍Python的多线程编程、线程的创建、同步、锁等知识。 7. Web开发:介绍Python的Web开发、Django框架、MVC模式、ORM等知识。 8. 数据库操作:介绍Python的数据库操作、MySQL、MongoDB等数据库的...