亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1566 | 回復(fù): 3
打印 上一主題 下一主題

一個讓我糾結(jié)了2天的python腳本 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2013-06-08 21:58 |只看該作者 |倒序瀏覽
class a:
    def __init__(self):
        self.a = 0
    def greet(self):
        self.luncher()
    def luncher(self):
        luncher_box = []
        for i in range(3):
            luncher_box.append(Process(target=self.say_greet))
        for s in range(len(luncher_box)):
            luncher_box[s].start()
        for j in range(len(luncher_box)):
            luncher_box[j].join()
    def say_greet(self):
        if True:
            plus = 3
            self.a += plus
            print self.a

if __name__ == '__main__':
    a =a()
    a.greet()
    print a.a

# 我想從類外面訪問a做了加法的值,不知道怎么弄,純python新手

論壇徽章:
0
2 [報告]
發(fā)表于 2013-06-09 09:43 |只看該作者
if __name__ == '__main__':
    a =a()
    a.say_greet()
    print a.a

論壇徽章:
0
3 [報告]
發(fā)表于 2013-06-09 15:26 |只看該作者
回復(fù) 2# xmchenb

謝謝,我已經(jīng)解決了,如果直接用say_greep方法沒有問題,我這個必須調(diào)用greet方法
我的解決方法是用multiprocessing的Value模塊,在父進程中將變量的類型設(shè)置為共享的


   

論壇徽章:
2
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:09
4 [報告]
發(fā)表于 2013-06-11 01:27 |只看該作者
本帖最后由 lolizeppelin 于 2013-06-11 14:20 編輯

首先...給a加數(shù)值

__setitem__

__getitem__

比較好用

你的Process函數(shù)是multiprocessing的Process?
你這里面應(yīng)該要用線程而不是進程吧?

你新創(chuàng)建進程當(dāng)然原來的self.a沒有了啊,用線程才可以。
你的解決方法實際效果應(yīng)該是設(shè)置了共享內(nèi)存,你那個地方的正常寫法應(yīng)該使用線程才對的。


————————————————分割線————————————————

認(rèn)真想了下,樓主你出現(xiàn)這個問題的原因在于你不知道 線程和子進程的區(qū)別
上你應(yīng)該先用下os.fork之類的基礎(chǔ)函數(shù)再去用multiprocessing的,不然你都只能照著別人的寫法寫而不知道為什么這樣寫的

子進程和線程的區(qū)別就在于是否共享主進程的變量

你的代碼其實就想執(zhí)行3個say_greet,你用multiprocessing.Process(底層其實就是os.fork了)其實就是復(fù)制了say_greet這段函數(shù)的內(nèi)存成了新的進程
這個子進程里的"a"和原來主進程里的"a"根本就不是一個,也不在一個內(nèi)存空間里(你一樓的代碼里子進程里因為沒有l(wèi)uncher,所以連值都沒有),當(dāng)然數(shù)值都不一樣的
正好這有一篇分析multiprocessing的文章http://bbs.csdn.net/topics/340142877

如果你想這個新進程和主進程里的a一樣,那么就需要用到“進程間通信”
常用的進程間通信
1、最常用的就是套接字socket
2、共享內(nèi)存——你那個multiprocessing的value模塊應(yīng)該就是實現(xiàn)了這個——寫代碼這個方法用得比較少的,共享內(nèi)存的鎖要比多線程跟麻煩,所以一般都少用共享內(nèi)存——這是我的理解,反正沒見我們后臺linux程序員用這個的,初學(xué)者不建議研究這里,當(dāng)然我也是初學(xué)者。


如果你這個say_greet不使用子進程直接用線程來啟動,就不會出現(xiàn)你說的問題。
實際正常寫這樣的代碼正常反應(yīng)都是用線程來寫,除非你這里是刻意想測試multiprocessing的value模塊。
總體來說,你的問題還是你沒了解線程進程就開始用multiprocessing這類高級模塊造成的。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP