s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
print(s.getsockname()[0])
s.close()
备注:这个IP有可能被墙,可以换一个国内的,呵呵。。
如果是NAT出口的,显示的是NAT的IP地址。[......]
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
print(s.getsockname()[0])
s.close()
备注:这个IP有可能被墙,可以换一个国内的,呵呵。。
如果是NAT出口的,显示的是NAT的IP地址。[......]
转载自:http://www.tuicool.com/articles/vIRryi
product 笛卡尔积
permutations 排列
combinations 组合,没有重复
combinations_with_replacement 组合,有重复
>>> import itertools
>>> for i in itertools.product('ABCD', repeat = 2):
... print[......]
标题虽然说是线程,其实gevent用的是“greenlet”,可能翻译成"微线程"更合适一些。
1、线程池
import time
import gevent
from gevent.threadpool import ThreadPool
def my_func(text, num):
print text, num
pool = ThreadPool(100)
start = time.time()
for i in xrange(100000):[......]
在Python中,是支持可变长参数,甚至词典参数的,具体见 《Python中函数的参数传递与可变长参数》
而使用词典参数的方式,可以让我们节省很多不必要的初始化工作。
以初始化MySQL的conn为例:
Before:
# App Config
DB_HOST = "localhost"
DB_PORT = 3306
DB_NAME = "db"
DB_USER = "coder4"
DB_PASS = "password"
# Init conn
sel[......]
selenium是一套用于测试WebUI的自动化测试框架,它通过调用Chrome、Firefox来完成动态页面(含Javascript)的加载,因此也可以用来完成动态网页抓取。
1、下载selenium
wget http://selenium-release.storage.googleapis.com/2.44/selenium-server-standalone-2.44.0.jar
2、启动selenium-standalone
java -jar ./selenium-se[......]