锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久亚洲av综合波多野结衣,亚洲va中文字幕无码久久,欧美国产成人久久精品http://www.shnenglu.com/socketref/category/20527.htmlgis,mouse,luolasizh-cnSun, 04 May 2014 09:53:03 GMTSun, 04 May 2014 09:53:03 GMT60tkInter濡備綍涓巊event鍗忎綔http://www.shnenglu.com/socketref/archive/2014/05/04/206815.html鏀懼眮闃跨嫍 鏀懼眮闃跨嫍 Sun, 04 May 2014 08:59:00 GMThttp://www.shnenglu.com/socketref/archive/2014/05/04/206815.htmlhttp://www.shnenglu.com/socketref/comments/206815.htmlhttp://www.shnenglu.com/socketref/archive/2014/05/04/206815.html#Feedback0http://www.shnenglu.com/socketref/comments/commentRss/206815.htmlhttp://www.shnenglu.com/socketref/services/trackbacks/206815.html鐬呭埌涓孌典唬鐮侊紝榪呴熸敹钘?br />


 1 import gevent
 2 from gevent import socket
 3 import Tkinter as tk
 4 
 5 class SockLoop(object):
 6     def __init__(self, callback):
 7         self.callback = callback
 8 
 9     def __call__(self, sock, client):
10         while 1:
11             mes = sock.recv(256)
12             ret = self.callback(client, mes)
13             if ret is not None:
14                 sock.send(ret)
15 
16 def socket_server(port, callback):
17     ssock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
18     ssock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
19     ssock.bind(('', port))
20     ssock.listen(5)
21 
22     while 1:
23         sock, client = ssock.accept()
24         gevent.spawn(callback, sock, client)
25 
26 class App(object):
27     def __init__(self, root):
28         self.greenlet = None
29         self.root = root
30         self._build_window(root)
31         self.root.after(100, self._connect)
32 
33     def add_text(self, text):
34         cleaned_string = text.replace('\r''')
35         self.text.insert(tk.END, cleaned_string)
36 
37     def quit(self):
38         self.root.quit()
39 
40     def _build_window(self, root):
41         self.frame = tk.Frame(root)
42         self.text = tk.Text(self.frame)
43         self.quit_button = tk.Button(self.frame, text="Quit", command=self.quit)
44         self.text.pack()
45         self.quit_button.pack()
46         self.frame.pack()
47 
48     def _connect(self):
49         self.greenlet = gevent.spawn(
50                 socket_server,
51                 8080,
52                 SockLoop(lambda cl, txt: self.add_text("%s: %s" % (cl, txt))))
53         self.gevent_loop_step()
54 
55     def gevent_loop_step(self):
56         gevent.sleep()
57         self.root.after_idle(self.gevent_loop_step)
58 
59 
60 if __name__ == '__main__':
61     root = tk.Tk()
62     app = App(root)
63     root.mainloop()


鏀懼眮闃跨嫍 2014-05-04 16:59 鍙戣〃璇勮
]]>
nginx+gevent+webpy+gridfs 鎻愪緵鏂囦歡鏈嶅姟闆嗙兢鏂規http://www.shnenglu.com/socketref/archive/2014/03/29/206396.html鏀懼眮闃跨嫍 鏀懼眮闃跨嫍 Sat, 29 Mar 2014 13:27:00 GMThttp://www.shnenglu.com/socketref/archive/2014/03/29/206396.htmlhttp://www.shnenglu.com/socketref/comments/206396.htmlhttp://www.shnenglu.com/socketref/archive/2014/03/29/206396.html#Feedback0http://www.shnenglu.com/socketref/comments/commentRss/206396.htmlhttp://www.shnenglu.com/socketref/services/trackbacks/206396.html鍙戦佽呬紶閫佹秷鎭埌騫沖彴緋葷粺鍐呴儴騫跺皢娑堟伅鍐欏叆gridfs錛屽緟鎺ユ敹鑰呬笂綰挎椂騫沖彴灝嗘秷鎭帹閫佽嚦鎺ユ敹鑰呫?
鑰冭檻鍒板甫瀹藉埄鐢紝鎺ユ敹鑰呭緱鍒扮殑娑堟伅灝嗕笉鍖呭惈浜岃繘鍒舵暟鎹紝渚嬪: 闊抽錛屽浘鍍忕瓑絳夈?榪欒姹傛帴鏀惰呭騫沖彴鍙戣搗涓嬈¤幏鍙栨秷鎭寘鍐呮寚瀹氱殑闊抽鍜屽浘鍍忔暟鎹殑璇鋒眰銆?br />縐誨姩绔悜騫沖彴璇鋒眰浜岃繘鍒舵暟鎹殑鎯呭喌榪樺寘鍚?銆愮綰挎枃浠朵紶閫併戝満鏅?銆?
浜岃繘鍒舵暟鎹線寰鏄寚閭d簺鏁版嵁閲忔瘮杈冨ぇ鐨勫璞★紝榪欎簺瀵硅薄鍦ㄧЩ鍔ㄤ袱绔氦鎹㈡椂錛屼氦浜掗氶亾灝嗕笉鍗犵敤涓庢帴鍏ユ湇鍔″櫒鐨勮繛鎺ラ氶亾錛岃屾槸閫氳繃nginx浼犻佸埌騫沖彴鍐呴儴錛?鍚屾牱鎺ユ敹鑰呰幏鍙栦簩榪涘埗鏁版嵁涔熸槸閫氳繃nginx鑾峰彇銆傝繖縐嶈姹傛槸HTTP鐨勩?br />榪欓噷鏁寸悊鐨勬槸濡備綍鍦ㄥ鉤鍙伴儴緗?銆愯礋杞藉潎琛$殑闆嗙兢鐨勫垎甯冨紡鐨勬枃浠舵湇鍔°?br />
nginx :               http鏈嶅姟錛屾彁渚涘弽鍚戜唬鐞嗗拰璐熻澆鍧囪 鏈嶅姟錛堥泦緹ゅ彲鐢―NS鎴栬冭檻LVS鏂規錛?br />mongodb+gridfs : 鐢ㄤ簬鏂囦歡鏈嶅姟鎻愪緵錛屽叾鍐呯疆gridfs鎻愪緵浜嗗垎甯冨紡錛屾搗閲忓瓨鍌ㄧ殑鏂規
gevent+webpy : nginx鐩存帴璇誨彇gridfs鏄笉鍚堥傜殑錛岄厤緗簡cgi鎵嶈兘瀹屾垚鐗瑰畾鍔熻兘錛岃繖閲屼嬌鐢╳ebpy錛屾瘮django鏇磋交鏇村ソ鐢ㄣ?br />                         webpy鐨勪綔鐢ㄦ槸鎺ユ敹鍒頒笂浼犲拰涓嬩紶鏂囦歡鐨勮姹傦紝璇誨啓gridfs鏂囦歡鍐呭緇欑Щ鍔ㄧ銆?br />                          gevent鏄珮鏁堢殑閫氫俊妗嗘灦錛岃櫧鐒跺崟綰跨▼宸ヤ綔錛屼絾鎬ц兘闈炲父鐨勫ソ錛?br />                         鐢ㄥソgevent鍏抽敭鍦ㄤ笌澶栭儴鐨刬o蹇呴』鍏ㄩ儴閮芥槸寮傛鐨勶紝渚嬪錛?鏁版嵁搴擄紝鏂囦歡紓佺洏璁塊棶絳夌瓑銆?br />                         mongodb瀵筭event宸茬粡鏀寔錛実event瀵箇ebpy錛宒jango錛宲sycopg2鏀寔涔熺浉褰撶殑濂斤紝鎵浠ヨ鎻愪緵webservice鏈嶅姟閭e氨鑰冭檻鐢╣event+webpy鎴杁jango鎶婏紝鎬ц兘鏄潬鏉犵殑錛屾瘮 apache+mod_wsgi瑕佸ソ寰堝 錛岃屼笖gevent鏄繘紼嬪唴鐨勪笉鍚岀殑HTTP REQUEST鍙互鏄叡浜暟鎹殑錛岃繖涓鐐歸潪甯歌鎯?apache+mod_wsgi鐨凴EQUEST鍙槸闅旂鐨勫摝錛侀櫎闈炴偍閫氳繃redis鐨凱UB/SUB瀹炵幇涓や釜REQUEST鐨勯氫俊)
                       
鍏蟲敞鐨勯棶棰橈細
錛?涓嬩紶澶ф枃浠舵椂鐨勫鐞?br />銆銆銆濡傛灉鐩存帴鐢╪ginx褰撶劧娌℃湁榪欎釜闂銆錛屼絾鐢╳ebpy璇誨彇鏂囦歡榪斿洖HttpResponse鏃墮棶棰樻潵浜嗭紝鎬諱笉鑷充簬璇誨彇鏁翠釜鏂囦歡錛岀劧鍚庡啀return銆?br />         榪欑鏂瑰紡鍦╬hp鏈塮lush鏂規硶錛宲ython鍙兘鐢▂ield鏉ュ仛
 2.涓婁紶澶ф枃浠舵椂鐨勫鐞?br />        褰撴帴鏀跺埌http鐨勬枃浠禤OST璇鋒眰鏃訛紝鏂囦歡宸茬粡鍏ㄩ儴緙撳瓨鍒皐eb鏈嶅姟鍣紝濡傛灉鍚屾椂鍑犲崈涓枃浠朵笂浼犲湪榪涜錛屾湇鍔″櫒灝變細琚尋鐖嗭紝榪欎篃鏄緢澶氱綉绔欎笉鍏佽澶ф枃浠朵笂浼犵殑緙樻晠鍚с傚叧浜庤繖涓棶棰橈紝鎴戞兂灝遍渶瑕佷慨鏀逛竴涓媤ebpy鍏充簬鏂囦歡涓婁紶鐨勫鐞嗕唬鐮佷簡錛屽皢鎺ユ敹鍒扮殑鏂囦歡鏁版嵁浠ユ祦鐨勫艦寮忓啓鍏ュ埌gridfs閲屽幓浣滀負涓存椂鏂囦歡琚紦瀛橈紝絳夊畬鍏ㄦ帴鏀舵枃浠舵椂錛屾墠閫氱煡鍒癶andler浠g爜錛岃繖鏍峰繀瀹氶珮鏁堝緢澶?鏂扮殑闂鍙堟潵浜嗭紝浼氫笉浼氭妸gridfs鎼炵垎鎺? 澶勭悊鏃惰冭檻寤舵椂緙撳瓨鎻愪氦gridfs鎶?銆?br />
BUF_SIZE = 262144
class download:
    
def GET(self):
        file_name 
= 'file_name'
        file_path 
= os.path.join('file_path', file_name)
        f 
= None
        
try:
            f 
= open(file_path, "rb")
            webpy.header(
'Content-Type','application/octet-stream')
            webpy.header(
'Content-disposition''attachment; filename=%s.dat' % file_name)
            
while True:
                c 
= f.read(BUF_SIZE)
                
if c:
                    
yield c
                
else:
                    
break
        
except Exception, e:
            
print e
            
yield 'Error'
        
finally:
            
if f:
                f.close()



links:
http://api.mongodb.org/python
http://webpy.org/cookbook/storeupload.zh-cn
http://webpy.org/cookbook/streaming_large_files
http://gevent.org   涓嬩喚浠g爜 demo寰堝煎緱鐪嬪摝 gevent 1.0 鐢眑ibev 鏇挎崲浜唋ibevent




鏀懼眮闃跨嫍 2014-03-29 21:27 鍙戣〃璇勮
]]>
gevent鏁版嵁搴撹繛鎺ユ祴璇?/title><link>http://www.shnenglu.com/socketref/archive/2013/09/25/203423.html</link><dc:creator>鏀懼眮闃跨嫍 </dc:creator><author>鏀懼眮闃跨嫍 </author><pubDate>Tue, 24 Sep 2013 18:08:00 GMT</pubDate><guid>http://www.shnenglu.com/socketref/archive/2013/09/25/203423.html</guid><wfw:comment>http://www.shnenglu.com/socketref/comments/203423.html</wfw:comment><comments>http://www.shnenglu.com/socketref/archive/2013/09/25/203423.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/socketref/comments/commentRss/203423.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/socketref/services/trackbacks/203423.html</trackback:ping><description><![CDATA[<br />鍚屾牱鍦ㄥ嚱鏁頒腑榪炴帴pgsql錛岀劧鍚庢墽琛?00嬈℃煡璇紝<br />嫻嬭瘯gevent妯″紡銆佷覆琛屾煡璇€佸綰跨▼鏌ヨ <br />鏁版嵁濡備笅錛?nbsp;<br /><div>multithread_test cost time: 2.45199990273</div><div>normal_test cost time: 4.04299998283</div><div>gevent_test cost time: 2.12800002098</div>緇撴灉 涓茶鏈鎱?.4s, 澶氱嚎紼?2.45s ,gevent鏈蹇?.12 ,yes!<br /><br />嫻嬭瘯浠g爜: <br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; "> 1</span> <span style="color: #0000FF; ">import</span> gevent<br /><span style="color: #008080; "> 2</span> <span style="color: #0000FF; ">import</span> gevent.queue<br /><span style="color: #008080; "> 3</span> <br /><span style="color: #008080; "> 4</span> <span style="color: #0000FF; ">import</span> psycopg2<br /><span style="color: #008080; "> 5</span> <span style="color: #0000FF; ">import</span> psycopg2.extensions<br /><span style="color: #008080; "> 6</span> <br /><span style="color: #008080; "> 7</span> <span style="color: #0000FF; ">import</span> psycogreen.gevent<br /><span style="color: #008080; "> 8</span> <br /><span style="color: #008080; "> 9</span> psycogreen.gevent.patch_psycopg()<br /><span style="color: #008080; ">10</span> <br /><span style="color: #008080; ">11</span> sys.path.insert(0,<span style="color: #800000; ">'</span><span style="color: #800000; ">../</span><span style="color: #800000; ">'</span>)<br /><span style="color: #008080; ">12</span> <br /><span style="color: #008080; ">13</span> <span style="color: #0000FF; ">import</span> easymq<br /><span style="color: #008080; ">14</span> <br /><span style="color: #008080; ">15</span> <span style="color: #800000; ">'''</span><span style="color: #800000; "><br /></span><span style="color: #008080; ">16</span> <span style="color: #800000; ">鍦ㄥ悓涓綰跨▼涓紝鍚屼竴涓繛鎺onn涓婁袱嬈″垱寤虹殑cur灝嗕細鏄竴鏍鋒淮錛屽洜涓烘槸寮傛wait_read()緙樻晠<br /></span><span style="color: #008080; ">17</span> <span style="color: #800000; ">鎵浠ヨ涔堟瘡嬈″垱寤烘暟鎹簱榪炴帴錛岃涔堜嬌鐢╠bpool<br /></span><span style="color: #008080; ">18</span> <span style="color: #800000; "></span><span style="color: #800000; ">'''</span><br /><span style="color: #008080; ">19</span> <br /><span style="color: #008080; ">20</span> <br /><span style="color: #008080; ">21</span> <span style="color: #0000FF; ">def</span> readThread():<br /><span style="color: #008080; ">22</span>     conn = psycopg2.connect(database=<span style="color: #800000; ">'</span><span style="color: #800000; ">postgres</span><span style="color: #800000; ">'</span>,user=<span style="color: #800000; ">'</span><span style="color: #800000; ">postgres</span><span style="color: #800000; ">'</span>,password=<span style="color: #800000; ">'</span><span style="color: #800000; ">111111</span><span style="color: #800000; ">'</span>)<br /><span style="color: #008080; ">23</span> <br /><span style="color: #008080; ">24</span>     <span style="color: #008000; ">#</span><span style="color: #008000; "> cur = conn.cursor(cursor_factory=psycopg2.extensions.DictCursor)</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">25</span> <span style="color: #008000; "></span>    cur = conn.cursor(cursor_factory=psycopg2.extensions.cursor)<br /><span style="color: #008080; ">26</span> <br /><span style="color: #008080; ">27</span>     <span style="color: #008000; ">#</span><span style="color: #008000; "> cur.execute("select pg_sleep(%s)", (2,))</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">28</span> <span style="color: #008000; "></span>    <span style="color: #0000FF; ">for</span> n <span style="color: #0000FF; ">in</span> range(10):<br /><span style="color: #008080; ">29</span>         cur.execute(<span style="color: #800000; ">"</span><span style="color: #800000; ">select CURRENT_DATE</span><span style="color: #800000; ">"</span>)<br /><span style="color: #008080; ">30</span>         <span style="color: #008000; ">#</span><span style="color: #008000; "> print cur.fetchone()</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">31</span> <span style="color: #008000; "></span>    <span style="color: #008000; ">#</span><span style="color: #008000; "> print 'read end..'</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">32</span> <span style="color: #008000; "></span>    conn = None<br /><span style="color: #008080; ">33</span> <br /><span style="color: #008080; ">34</span> <br /><span style="color: #008080; ">35</span> <span style="color: #0000FF; ">def</span> gevent_test():<br /><span style="color: #008080; ">36</span>     jobs=[]<br /><span style="color: #008080; ">37</span>     <span style="color: #0000FF; ">for</span> n <span style="color: #0000FF; ">in</span> range(100):<br /><span style="color: #008080; ">38</span>         jobs.append(gevent.spawn(readThread))<br /><span style="color: #008080; ">39</span>     gevent.joinall(jobs)<br /><span style="color: #008080; ">40</span> <br /><span style="color: #008080; ">41</span> <span style="color: #0000FF; ">def</span> normal_test():<br /><span style="color: #008080; ">42</span>     <span style="color: #0000FF; ">for</span> n <span style="color: #0000FF; ">in</span> range(100):<br /><span style="color: #008080; ">43</span>         readThread()<br /><span style="color: #008080; ">44</span> <br /><span style="color: #008080; ">45</span> <span style="color: #0000FF; ">def</span> multithread_test():<br /><span style="color: #008080; ">46</span>     threads=[]<br /><span style="color: #008080; ">47</span>     <span style="color: #0000FF; ">for</span> n <span style="color: #0000FF; ">in</span> range(100):<br /><span style="color: #008080; ">48</span>         thread = threading.Thread(target=readThread)<br /><span style="color: #008080; ">49</span>         threads.append(thread)<br /><span style="color: #008080; ">50</span>         thread.start()<br /><span style="color: #008080; ">51</span>     <span style="color: #0000FF; ">for</span> thread <span style="color: #0000FF; ">in</span> threads:<br /><span style="color: #008080; ">52</span>         thread.join()<br /><span style="color: #008080; ">53</span> <br /><span style="color: #008080; ">54</span> start = time.time()<br /><span style="color: #008080; ">55</span> normal_test()<br /><span style="color: #008080; ">56</span> end = time.time()<br /><span style="color: #008080; ">57</span> <span style="color: #0000FF; ">print</span> <span style="color: #800000; ">'</span><span style="color: #800000; ">normal_test cost time:</span><span style="color: #800000; ">'</span>,end-start<br /><span style="color: #008080; ">58</span> <br /><span style="color: #008080; ">59</span> start = time.time()<br /><span style="color: #008080; ">60</span> gevent_test()<br /><span style="color: #008080; ">61</span> end = time.time()<br /><span style="color: #008080; ">62</span> <span style="color: #0000FF; ">print</span> <span style="color: #800000; ">'</span><span style="color: #800000; ">gevent_test cost time:</span><span style="color: #800000; ">'</span>,end-start<br /><span style="color: #008080; ">63</span> <br /><span style="color: #008080; ">64</span> <span style="color: #008000; ">#</span><span style="color: #008000; "> start = time.time()</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">65</span> <span style="color: #008000; ">#</span><span style="color: #008000; "> multithread_test()</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">66</span> <span style="color: #008000; ">#</span><span style="color: #008000; "> end = time.time()</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">67</span> <span style="color: #008000; ">#</span><span style="color: #008000; "> print 'multithread_test cost time:',end-start</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">68</span> <span style="color: #008000; "></span></div><img src ="http://www.shnenglu.com/socketref/aggbug/203423.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/socketref/" target="_blank">鏀懼眮闃跨嫍 </a> 2013-09-25 02:08 <a href="http://www.shnenglu.com/socketref/archive/2013/09/25/203423.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鎴戠殑騫沖彴妗嗘灦http://www.shnenglu.com/socketref/archive/2013/09/25/203422.html鏀懼眮闃跨嫍 鏀懼眮闃跨嫍 Tue, 24 Sep 2013 16:35:00 GMThttp://www.shnenglu.com/socketref/archive/2013/09/25/203422.htmlhttp://www.shnenglu.com/socketref/comments/203422.htmlhttp://www.shnenglu.com/socketref/archive/2013/09/25/203422.html#Feedback0http://www.shnenglu.com/socketref/comments/commentRss/203422.htmlhttp://www.shnenglu.com/socketref/services/trackbacks/203422.html鎼炰簡榪欎箞涔呯殑RPC閫氫俊妗嗘灦TCE錛屽畬鎴恓ava錛宑++,python,javascript,actionscript涔嬮棿鐨勪簰鐩歌皟鏉ヨ皟鍘伙紝鎰熻寰堣垝鏈嶃?br />
浣滀負縐誨姩搴旂敤騫沖彴錛屾搗閲忓茍鍙戝拰楂樻晥浼犺緭鏄瑕佽冭檻瑕佺偣銆?br />甯傞潰涓婂厖鍊肩潃閮藉樊涓嶅鐨勮В鍐蟲妧鏈柟妗堬紝鏃犻潪閭d簺
webserver+db
ngnix+webserver+mq+logic-server
ngnix+gevent-wsgi+db
webapi宸茬粡琚珮涓懼埌涓嶅彲瓚呰秺鐨勫湴姝?br />
鑰屾垜錛屼笉璧板甯歌礬錛屾垜寰楀彟杈熸嵎寰?br />-http鐨勬晥鐜囨牴鏈棤娉曡窡socket鐨勯暱榪炴帴濯茬編
-鏈嶅姟鍣ㄦ槸闇瑕佸弽鍚戞帹閫佹秷鎭埌縐誨姩璁懼鐨?br />-鎿嶄綔鎺ュ彛鏄畝鍗曠殑鏄撴墿灞曠殑錛屽睆钄芥帀閫氫俊緇嗚妭
-鏀寔htm5鐨剋ebsocket錛屾敮鎸乯ava錛屾敮鎸乸ython錛屾敮鎸乸ython瀹㈡埛绔皟鐢?br />
閭f垜鐨勬柟妗堟槸tce涓哄熀紜鐨凴PC妗嗘灦騫沖彴錛屾姏寮冮偅浜泋mls錛宩son錛岃寮鍙戣呬粠鏃犲敖鐨勭綉緇滅紪瑙g爜宸ヤ綔涓劚紱誨嚭鏉ワ紝涓嶇敤鑰冭檻澶氱閫氫俊妯″紡錛屽悓姝ュ拰寮傛銆?br />font-gate :  鍓嶇鎺ュ叆鏈嶅姟鍣?br />easymq  : 騫沖彴鏈嶅姟鎬葷嚎娑堟伅闃熷垪 
logic-service 錛?涓嶅悓鐨勯昏緫鏈嶅姟鍣?br />
璁炬兂錛屽湪android鎵嬫満涓妀ava浠g爜璋冪敤鍑芥暟 whats_yourname(), 榪欎釜鍑芥暟騫朵笉鍦ㄦ湰鍦幫紝鑰屾槸瀛樺湪榪滅騫沖彴鍐呴儴鐨勪竴涓湇鍔″櫒涓?璋冪敤騫惰鎵ц榪斿洖'scott'鍒版墜鏈虹粓绔紝榪欐槸澶氫箞浠や漢蹇箰鐨勪簨鎯咃紝鐢ㄦ埛涓嶇敤鍏沖績娑堟伅濡備綍琚垪闆嗭紝濡備綍琚垎媧撅紝榪欎竴鍒囬兘鏄忔槑鐨勩?br />鍚屾牱錛屾湇鍔″櫒涓誨姩鎺ㄩ佸晢鍝佹墦鎶樹俊鎭埌鎵嬫満涓婏紝鏈嶅姟鍣ㄤ粎浠呴渶瑕佽皟鐢ㄦ墜鏈烘帴鏀跺嚱鏁幫紝騫跺~鍐欒浼犺緭鐨勫弬鏁板嵆鍙?br />鍏跺疄錛岃繖浜涘氨鏄疪PC鐨勫疄鐜幫紝榪欐牱鐨勪笢涓滃埌澶勯兘鏄?DCOM錛孋ORBA錛孖CE錛屽彧鏄垜鍋氬緱鏇村姞鐏墊椿

鎬繪槸鎯沖仛浜涗護浜鴻交鏉懼茍蹇箰鐨勪簨鎯咃紒


鏀懼眮闃跨嫍 2013-09-25 00:35 鍙戣〃璇勮
]]>
gevent鏁村悎絎笁鏂硅蔣浠跺寘闇娉ㄦ剰闂http://www.shnenglu.com/socketref/archive/2013/09/24/203421.html鏀懼眮闃跨嫍 鏀懼眮闃跨嫍 Tue, 24 Sep 2013 15:47:00 GMThttp://www.shnenglu.com/socketref/archive/2013/09/24/203421.htmlhttp://www.shnenglu.com/socketref/comments/203421.htmlhttp://www.shnenglu.com/socketref/archive/2013/09/24/203421.html#Feedback0http://www.shnenglu.com/socketref/comments/commentRss/203421.htmlhttp://www.shnenglu.com/socketref/services/trackbacks/203421.html
http://blog.163.com/lxl_1995/blog/static/677173392012724103742746/
榪欑瘒
鍗氭枃璁茬殑闈炲父娓呮錛屽緩璁涓涓?nbsp;

gevent鐨勭壒鐐瑰涓嬶細 
 1. 鍗曠嚎紼嬫墽琛岋紝鎵鏈夊崗紼嬮兘鍦ㄥ悓涓榪涚▼涓妯℃嫙鍜岃皟搴﹀垎媧?br /> 2. 鍙互鍒涘緩鎴愬崈涓婁竾鐨?鍗忕▼錛岃屼笉浼氬彈浠諱綍鎬ц兘褰卞搷
3. 鐢變簬spawn鐨勫崗紼嬩笉鏄痮s鍒嗛厤鍜岀鐞嗭紝鎵浠ヤ笉浼氭湁棰濆鐨勭嚎紼嬭祫婧愬垎閰嶏紝cpu涔熶笉鐢ㄥ湪榪欎簺綰跨▼涔嬮棿璋冨害鍒囨崲
4. 鍗曠嚎紼嬫墽琛岋紝鏃犻渶鑰冭檻璧勬簮浜掓枼
5. 鍗忕▼涔嬮棿鍒囨崲鏄氳繃gevent鐨刬o闃誨瀹屾垚錛屼緥濡?gevent.sleep(0), queue.get/put,event,socket....
    姣忚皟鐢ㄤ竴嬈event 鐨刟pi錛実event灝辮兘鑾峰緱涓嬈chedule鐨勬満浼?榪欏緢綾諱技鎿嶄綔緋葷粺鐨勭敤鎴瘋皟鐢ㄤ腑鏂紝鐢辯敤鎴鋒佸垏鎹㈠埌鍐呮牳鎬?

 浠ヤ笂鐗圭偣淇濊瘉gevent鐨勬ц兘闈炲父鍑鴻壊錛屼絾褰撴垜浠殑server鐢ㄥ埌絎笁鏂硅蔣浠跺寘鐨勬椂鍊欓偅瑕侀潪甯稿皬蹇冧簡錛岀壒鍒槸榪欎簺鍖呭唴閮ㄦ秹鍙婁簡io鎿嶄綔銆?br />濡傛灉絎笁鏂硅蔣浠跺寘鏄函python鐨勯偅寰堢畝鍗曪紝鍙渶瑕乬event.monkey_patch(xxx)灝眔kay錛?浣嗗鏋滃寘鏄墿灞昪lib,閭h褰撳績浜嗭紝monkey_patch
騫朵笉鑳藉皢鍏剁浉鍏砳o鎿嶄綔鎵撲笂琛ヤ竵錛屼負浜嗕嬌鐢ㄨ繖浜涚涓夋柟杞歡鍖咃紝瑕佹眰榪欎簺杞歡鍖呭繀欏繪敮鎸?鍗忕▼寮傛 鎺ュ彛(璋冪敤鍏跺悓姝o鎺ュ彛錛屽皢闃誨浣廹event鐨勬墽琛岀嚎紼嬶紝閭event灝卞畬铔嬩簡)銆?br />gevent鐨刾atch瀵筽sycopg2鏃犳晥錛屽洜涓簆sycopg2鐨勯氫俊閮ㄥ垎鏄痗鎺ュ彛鐨勫嚱鏁板簱錛岃繕濂絧sycopg2鍐呴儴鏀寔鍗忕▼錛岄渶瑕佷嬌鐢?鍒?nbsp;psycogreen 榪欎釜涓滀笢
psycogreen.gevent.patch_psycopg() 鏀寔鍗忕▼
涔嬪悗鐨勫湪gevent鐨勭嚎紼嬩腑鎵цsql騫剁瓑寰呮暟鎹繑鍥炴椂錛実event绔嬮┈灝嗘墽琛屽垏鎹㈠埌鍙﹀鐨勭嚎紼?br />
gvent欏圭洰涓細鐢ㄥ埌鍚勭璇稿鐨勭涓夋柟搴擄紝蹇呴』瑕佹眰榪欎簺搴撶殑io鎺ュ彛涓嶈兘鏄樆濉炵殑錛屼篃灝辨槸鑳芥敮鎸佸埌gevent寮傛妯″紡

搴旂敤閫昏緫浠g爜鍦ㄨ鎵ц鏃?鏃犵郴緇焌pi鍛煎彨)錛屽崟綰跨▼姣斿綰跨▼鎵ц閫熷害鏇村揩銆傚驚鐜墽琛屼竴孌佃綆椾簩嬈″嚱鏁頒唬鐮侊紝鐢變簬鏈熼棿娌℃湁緋葷粺api璋冪敤錛宱s涓嶈兘榪涜鍐呮牳tasklet鍒囨崲錛屾墍浠ュ鑷碿pu鐨勫嘲鍊煎彲浠ユ攢鍗囧埌90%錛岀洿鍒扮‖浠躲佹椂閽熺瓑涓柇浜х敓錛屽己琛屽垏鎹㈠埌鍏朵粬綰跨▼銆?澶氭牳蹇僣pu琛ㄧ幇涓哄崟涓牳濮嬬粓寮傚父鐨勫繖紕岋紝鍏朵粬鍑犱釜姣旇緝絀洪棽銆?nbsp;


鏀懼眮闃跨嫍 2013-09-24 23:47 鍙戣〃璇勮
]]>
gevent涔婹ueuehttp://www.shnenglu.com/socketref/archive/2013/09/19/203306.html鏀懼眮闃跨嫍 鏀懼眮闃跨嫍 Thu, 19 Sep 2013 06:44:00 GMThttp://www.shnenglu.com/socketref/archive/2013/09/19/203306.htmlhttp://www.shnenglu.com/socketref/comments/203306.htmlhttp://www.shnenglu.com/socketref/archive/2013/09/19/203306.html#Feedback0http://www.shnenglu.com/socketref/comments/commentRss/203306.htmlhttp://www.shnenglu.com/socketref/services/trackbacks/203306.htmlgevent鎻愪緵浜?Queue', 'PriorityQueue', 'LifoQueue', 'JoinableQueue' 鍥涚闃熷垪錛屾枃妗d粙緇嶄笉鍏?錛岀湅浜嗕唬鐮佹柟鎵嶄簡瑙?br />
鎵鏈夐槦鍒楃被鍨嬮兘鏄畨鍏ㄧ殑(synchronized queue) ,鏁版嵁鎺ㄥ叆鍜屾彁鍙栨棤闇璁塊棶淇濇姢

LifoQueue - 鍚庤繘鍏堝嚭闃熷垪錛屽悓鏁版嵁鍫嗘爤緇撴瀯
JoinableQueue -  澧炲姞join錛屾墍鏈夋暟鎹彁鍙栧畬姣昷oin瑙i櫎闃誨 
PriorityQueue - 浼樺厛綰ч槦鍒楋紝鎻愬彇鏍規嵁緗叆鏃剁殑浼樺厛綰у埆
Queue - 瓚呯被娑堟伅闃熷垪錛屾彁渚涘悓姝ユ暟鎹疆鍏ュ拰鎻愬彇鍔熻兘錛屽叾浠栭槦鍒楀潎浠嶲ueue媧劇敓

鏀懼眮闃跨嫍 2013-09-19 14:44 鍙戣〃璇勮
]]>
gevent::AsyncResulthttp://www.shnenglu.com/socketref/archive/2013/05/14/200238.html鏀懼眮闃跨嫍 鏀懼眮闃跨嫍 Mon, 13 May 2013 17:04:00 GMThttp://www.shnenglu.com/socketref/archive/2013/05/14/200238.htmlhttp://www.shnenglu.com/socketref/comments/200238.htmlhttp://www.shnenglu.com/socketref/archive/2013/05/14/200238.html#Feedback0http://www.shnenglu.com/socketref/comments/commentRss/200238.htmlhttp://www.shnenglu.com/socketref/services/trackbacks/200238.html
 1 class MutexObject:
 2     def __init__(self):
 3         self.mtx = threading.Condition()
 4         self.d = None
 5         
 6     def waitObject(self,timeout):
 7         d = None
 8         self.mtx.acquire()
 9         if self.d == None:
10             if timeout:
11                 self.mtx.wait(timeout)
12             else:
13                 self.mtx.wait()
14             d = self.d
15             self.d = None
16         self.mtx.release()
17         return d
18         
19     def notify(self,d):
20         self.mtx.acquire()
21         self.d = d
22         self.mtx.notify()
23         self.mtx.release()


鏀懼眮闃跨嫍 2013-05-14 01:04 鍙戣〃璇勮
]]>
国产精品免费看久久久| 2021久久精品免费观看| 久久国产精品无码HDAV| 精品久久久久久中文字幕| 精品国产乱码久久久久久浪潮| 热久久国产欧美一区二区精品| 一日本道伊人久久综合影| 久久99国产精品尤物| 国产2021久久精品| 无码AV波多野结衣久久| 国产精品热久久毛片| 色偷偷88888欧美精品久久久| 狠色狠色狠狠色综合久久| 亚洲午夜无码AV毛片久久| 久久久久免费精品国产| 亚洲国产另类久久久精品小说| 国产精品99久久久久久宅男| 亚洲精品国产字幕久久不卡| 国产高清美女一级a毛片久久w | 亚洲精品无码久久千人斩| 99热都是精品久久久久久| 无码久久精品国产亚洲Av影片| 国产成人无码精品久久久免费| 午夜天堂av天堂久久久| 一级女性全黄久久生活片免费 | 精品久久久久久| 久久久噜噜噜久久中文福利| 波多野结衣久久一区二区| 色婷婷久久久SWAG精品| 精品欧美一区二区三区久久久| 久久66热人妻偷产精品9| 伊人色综合久久天天人手人婷| 久久国产精品二国产精品| 亚洲国产精品久久久久婷婷软件| av午夜福利一片免费看久久| 久久国产欧美日韩精品| 中文字幕热久久久久久久| 狠狠综合久久AV一区二区三区| 久久人人爽人人人人片av| 亚洲?V乱码久久精品蜜桃| 久久综合色老色|