當前位置:首頁 » 編程語言 » python文件加鎖

python文件加鎖

發布時間: 2023-05-14 15:50:59

python queue 用加鎖嗎

隊列是否加鎖不取決於語言,取決於是否為多線程訪問

㈡ 使用python寫文件時,如何做到寫入文件由於外力刪掉了之後可以新創建一個同名文件並繼續寫入

你的試驗很詳細。不過這個現象在linux下可能與windows下不一樣。 通常改名或者是刪除後文件就失效了。寫入操作也是無效的。

為了防止別人修改你的文件,通常在寫入時,會加上一個鎖。使用操作系統特有的open方法才可以加鎖。

可以使用portalocker,filelock 也可以使用posixfile,
os.open能不能成呢?按理可以。不過C語言里使用fopen沒有這個功能,不過使用fcntl里的open可以。

你加了鎖後,別人就不能寫。文件處於佔用狀態。

另外操作系統都有一種文件監控機制的消息通知。具體忘記了。在unix與windows都有這個功能。當別人程序修改了某個文件,你會立刻得到消息通知。

補充一些教程。os.open還是可以用的。
os.open(file, flags[, mode]);
Parameters

file -- File name to be opened.

flags -- This is the following constants are options for the flags. They can be combined using the bitwise OR operator |. Some of them are not available on all platforms.
os.O_RDONLY: open for reading only
os.O_WRONLY: open for writing only
os.O_RDWR : open for reading and writing
os.O_NONBLOCK: do not block on open
os.O_APPEND: append on each write
os.O_CREAT: create file if it does not exist
os.O_TRUNC: truncate size to 0
os.O_EXCL: error if create and file exists
os.O_SHLOCK: atomically obtain a shared lock
os.O_EXLOCK: atomically obtain an exclusive lock
os.O_DIRECT: eliminate or rece cache effects
os.O_FSYNC : synchronous writes
os.O_NOFOLLOW: do not follow symlinks

mode -- This work in similar way as it works for chmod() method.

㈢ Python能不能寫病毒

國家計算機病毒應急處理中心通過對互聯網的監測發現,一種利用python語言編寫的惡意木馬程序出現。該惡意程序通過偽裝成多款常用應用軟體等進行傳播,誘使計算機用戶下載安裝。
這個新型的勒索病毒叫Dablio,理論上可以感染下列文件類型,也就是你電腦中以下列名字作為後綴名的文件,全部打不開。
相關推薦:《Python入門教程》
看了上面的文件類型,我也服了。這做毒的比我還想的周到。合著有點用的文件全想感染。
我們分析發現,該惡意軟體就是一款勒斗頌轎索軟體,其具有以下功能:
一、木馬會判斷自身進程名是否為systern.exe。如果不是,則將自身復制為C:UsersPublicsystern.exe 並執行;
二、釋放s.bat批處理腳本,關閉各種資料庫和web服務及進程;
三、遍歷受感染操作系統的所有盤符中的指定文件進行加密,加密後修改文件的擴展名為MyChemicalRomance4EVER;
四、木馬會調用系統的wevtutil命令空肆,對系統日誌中的「系統」、「安全」和「應用程序」三部分日誌內容進行清理,並刪除自身;
五、使用AES對稱演算法進行加密;
另外,惡意木馬程序完成加密後,會在操作系統中生成一個存有勒索信息的文本文件,提示並要求受感染的用戶訪問指定的Web網站支付一定的比特幣(電子貨幣),系統中加密的文件才可以被解鎖。
專家提醒:
針櫻世對這種情況,國家計算機病毒應急處理中心建議廣大計算機用戶採取如下防範措施:
(一)不要從陌生的網站下載應用程序。
(二)建議打開操作系統中防病毒軟體的「實時監控」功能,對操作操作進行主動防禦,這樣可以第一時間監控未知病毒的入侵活動。

㈣ 多線程文件寫同一個文件寫不進去

這可能是由於多線程同時訪問同一個文件導致的寫入沖突問題。為了避免這個問題,您可以滾滾使用一些常見的解決方案:

1. 使用文件鎖定:在每次寫文件時請求文件鎖定,確保同一時間只有一個線程可以寫入數據。

2. 對寫操作進行序列化:通過將寫操作集中到一個線程中,避免多個線程同時寫入同一個文件,從而避免沖突。

3. 確保寫操作的原子性:使用特殊的寫操作來確保所有的寫入都是不可分割的,以避免出現沖突。

4. 使用專門的文件寫入工具:使用專門的文件寫入工具,例如 log4cxx,它可以處理多線程寫入同一個文件的情況,並且能夠保證性能和正確性。

總之,為了避免多線程寫同一個文件導致的沖突問題,您需要選擇適當的解決方案,根據具體情況大世余進行調整和返茄優化。

㈤ python多個線程鎖可提高效率嗎

首先,Python的多線程本身就是效率極低的,因為有GIL(Global Interpreter Lock:全局解釋鎖)機制的限制,其作用簡單說就是:對於一個解釋器,只能有一個線程在執行bytecode。
所以如果為了追求傳統意義上多線程的效率,在Python界還是用多進程(multiprocessing)吧……
這里你用了多線程,且用了鎖來控制公共資源,首先鎖這個東西會導致死鎖,不加鎖反而沒有死鎖隱患,但會有同步問題。
另外,如果不同線程操作的是不同的文件,是不存在同步問題的,如果操作同一個文件,我建議採用Queue(隊列)來處理。
總的來說,用單線程就好了,因為Python多線程本身就沒什麼效率,而且單線程也不用考慮同步問題了。非要追求效率的話,就用多進程吧,同樣也要考慮進程鎖。

㈥ Python中的鎖都具有哪些

大致羅列一下:
一、全局解釋器鎖(GIL)
1、什麼是全局解釋器鎖
每個CPU在同一時間只能執行一個線程,那麼其他的線程就必須等待該線程的全局解釋器,使用權消失後才能使用全局解釋器,即使多個線程直接不會相互影響在同一個進程下也只有一個線程使用cpu,這樣的機制稱為全局解釋器鎖(GIL)。GIL的設計簡化了CPython的實現,使的對象模型包括關鍵的內建類型,如:字典等,都是隱含的,可以並發訪問的,鎖住全局解釋器使得比較容易的實現對多線程的支持,但也損失了多處理器主機的並行計算能力。
2、全局解釋器鎖的好處
1)、避免了大量的加鎖解鎖的好處
2)、使數據更加安全,解決多線程間的數據完整性和狀態同步
3、全局解釋器的缺點
多核處理器退化成單核處理器,只能並發不能並行。
4、GIL的作用:
多線程情況下必須存在資源的競爭,GIL是為了保證在解釋器級別的線程唯一使用共享資源(cpu)。
二、同步鎖
1、什麼是同步鎖?
同一時刻的一個進程下的一個線程只能使用一個cpu,要確保這個線程下的程序在一段時間內被cpu執,那麼就要用到同步鎖。
2、為什麼用同步鎖?
因為有可能當一個線程在使用cpu時,該線程下的程序可能會遇到io操作,那麼cpu就會切到別的線程上去,這樣就有可能會影響到該程序結果的完整性。
3、怎麼使用同步鎖?
只需要在對公共數據的操作前後加上上鎖和釋放鎖的操作即可。
4、同步鎖的所用:
為了保證解釋器級別下的自己編寫的程序唯一使用共享資源產生了同步鎖。
三、死鎖
1、什麼是死鎖?
指兩個或兩個以上的線程或進程在執行程序的過程中,因爭奪資源或者程序推進順序不當而相互等待的一個現象。
2、死鎖產生的必要條件?
互斥條件、請求和保持條件、不剝奪條件、環路等待條件
3、處理死鎖的基本方法?
預防死鎖、避免死鎖(銀行家演算法)、檢測死鎖(資源分配)、解除死鎖:剝奪資源、撤銷進程
四、遞歸鎖
在Python中為了支持同一個線程中多次請求同一資源,Python提供了可重入鎖。這個RLock內部維護著一個Lock和一個counter變數,counter記錄了acquire的次數,從而使得資源可以被多次require。直到一個線程所有的acquire都被release,其他的線程才能獲得資源。遞歸鎖分為可遞歸鎖與非遞歸鎖。
五、樂觀鎖
假設不會發生並發沖突,只在提交操作時檢查是否違反數據完整性。
六、悲觀鎖
假定會發生並發沖突,屏蔽一切可能違反數據完整性的操作。
python常用的加鎖方式:互斥鎖、可重入鎖、迭代死鎖、互相調用死鎖、自旋鎖大致羅列一下:
一、全局解釋器鎖(GIL)
1、什麼是全局解釋器鎖
每個CPU在同一時間只能執行一個線程,那麼其他的線程就必須等待該線程的全局解釋器,使用權消失後才能使用全局解釋器,即使多個線程直接不會相互影響在同一個進程下也只有一個線程使用cpu,這樣的機制稱為全局解釋器鎖(GIL)。GIL的設計簡化了CPython的實現,使的對象模型包括關鍵的內建類型,如:字典等,都是隱含的,可以並發訪問的,鎖住全局解釋器使得比較容易的實現對多線程的支持,但也損失了多處理器主機的並行計算能力。
2、全局解釋器鎖的好處
1)、避免了大量的加鎖解鎖的好處
2)、使數據更加安全,解決多線程間的數據完整性和狀態同步
3、全局解釋器的缺點
多核處理器退化成單核處理器,只能並發不能並行。
4、GIL的作用:
多線程情況下必須存在資源的競爭,GIL是為了保證在解釋器級別的線程唯一使用共享資源(cpu)。
二、同步鎖
1、什麼是同步鎖?
同一時刻的一個進程下的一個線程只能使用一個cpu,要確保這個線程下的程序在一段時間內被cpu執,那麼就要用到同步鎖。
2、為什麼用同步鎖?
因為有可能當一個線程在使用cpu時,該線程下的程序可能會遇到io操作,那麼cpu就會切到別的線程上去,這樣就有可能會影響到該程序結果的完整性。
3、怎麼使用同步鎖?
只需要在對公共數據的操作前後加上上鎖和釋放鎖的操作即可。
4、同步鎖的所用:
為了保證解釋器級別下的自己編寫的程序唯一使用共享資源產生了同步鎖。
三、死鎖
1、什麼是死鎖?
指兩個或兩個以上的線程或進程在執行程序的過程中,因爭奪資源或者程序推進順序不當而相互等待的一個現象。
2、死鎖產生的必要條件?
互斥條件、請求和保持條件、不剝奪條件、環路等待條件
3、處理死鎖的基本方法?
預防死鎖、避免死鎖(銀行家演算法)、檢測死鎖(資源分配)、解除死鎖:剝奪資源、撤銷進程
四、遞歸鎖
在Python中為了支持同一個線程中多次請求同一資源,Python提供了可重入鎖。這個RLock內部維護著一個Lock和一個counter變數,counter記錄了acquire的次數,從而使得資源可以被多次require。直到一個線程所有的acquire都被release,其他的線程才能獲得資源。遞歸鎖分為可遞歸鎖與非遞歸鎖。
五、樂觀鎖
假設不會發生並發沖突,只在提交操作時檢查是否違反數據完整性。
六、悲觀鎖
假定會發生並發沖突,屏蔽一切可能違反數據完整性的操作。
python常用的加鎖方式:互斥鎖、可重入鎖、迭代死鎖、互相調用死鎖、自旋鎖

㈦ 如何用多線程讀取大文件並且做數據處理,100

先說幾個要點:

a、文件在操作系統級,有描述符標記,關聯到打開的文件表項,文件表項紀錄了一個很重要的信息,當前文件的指針;
b、cpu要乾的工作比讀文件快不,讀一次文件的速度要慢於cpu處理一次的速度,沒必要多多線程,多線程提升不了多少性能,還增加編程的難度,單線程處理即可。
c、待處理文件,必須知道一定的邊界值,如分頁邊界或單條紀錄邊界。
有了上面的前提,每個線程維護單獨的緩沖區,緩存區大小就是c點提到的邊界紀錄大小。線程啟動,把緩沖區讀滿,處理數據。此處有個要點,必須做文件鎖,把要讀的邊界鎖住。否則讀出來的數據會產生混亂。(如果強行打開多個不同的文件不劃算,內存佔用可能會過多)。產生混亂的原因簡單,讀文件實際上是進行系統調用,系統調用有自己的緩沖區,這緩沖區未必跟你設置的緩沖區一樣大。多次讀多次移動指針,不加文件鎖處理的數據必定會亂。
文件鎖兩種方式加鎖,對整個文件加鎖,對位元組區間加鎖。都不是什麼難事。
實現方式1:對整個文件加鎖,因為我們要保證的是讀到的數據別混亂。
實現方式2:如果內存足夠大,維護n個獨立的文件描述符,這些文件描述符必須有獨立的文件指針,操作系統上有對應實現。每個線程操作未讀紀錄,這么做還需要維護共享的已讀紀錄指針。防止重復處理。這么做處理完成如果需要按順序合並文件是難點。處理過的數據有新的紀錄邊界。要視實際情況而定能不能這么做。寫程序要優先保證的是正確性,之後才是提升效率。
我說的理論,依據是操作系統提供的api處理。別的語言要依賴操作系統運行。原理差不多,目標語言有沒有操作系統提供的api強悍。依據使用的目標語言而定。絕大多數能叫編程語言的語言都會提供操作系統api對應的方法。(腳本語言例外,如shell,perl,javascript,vbscript,就可能沒這么強的控制能力。),java,objective-c,swift,php,python一般是不會有問題的。

㈧ 魔獸私服

主要的你要有2件東西
第一:魔獸世界客戶端
第二:資料庫

這里廢話就不說了,本人架設過WOWSF,說說數圓基據庫這塊,一般不會編程的人都覺得很神秘。一般都採用ODBC和MYsql,ODBC是電腦自帶的,MYSQL因為比較小功能全,很方便使用推薦這兩個。網上看有人寫的比較全大部分引用的懶得重新再寫了,我看還比較詳細,關鍵處做了注釋沒修改。比較難懂的就是SQL語句那裡,照做就OK。mysql用得是可視化界面很好操作你要沒用過就下中文版,有中文的。

mysql4.0.2
mysql-control-center0.9.4
MyODBC-standard-3.51
(上面3個都是架設伺服器用的資料庫端和資料庫管理端:mysql4.0.2是資料庫主程序,mysql-control center0.9.4是資料庫管理界面程序,MyODBC是MySQL與Windows數據服務的連接驅動)
當然還有wow beta3客戶端和3734(就是0.8.0)補丁
需要的資料庫有:
25M的python.sql
7M的python.sql
幾個1k左右的commands.sql,creatures_mov.sql,gmlogin.sql,npc_text.sql,sh.sql,trainers.sql

(注意以上的資料庫要下載的然後導入mysql)
1. 先安裝mysql,mysqlcc,ODBC然後重起。
重起後看看右下的系統托盤里有沒有個橘盯謹紅綠燈的圖標,沒有的話運行c:\mysql\bin\winmysqladmin.exe
開始架伺服器:
運行 mysqlcc ,新建伺服器:
name:python
host:localhost
user:root
password:空
2. 確定後雙擊「 python 」,右鍵點擊 DataBases ,新建資料庫取名 wow 。
右擊User Administration,新建用戶。名字隨便,Hose:localhost,密碼自己記好。
選上All Privileges,右邊在Global Privileges和wow上打對勾,應用。
再把系統自動添加的@localhost用戶的All P....和Glo...,wow上也打上對勾應用。
3. 不關程序,到控制面板,管理工具,服務:mysql。
停止服務,在參數空白行里輸入
safe_MySQLd -O key_buffer=16M -O table_cache=128 -O sort_buffer=4M -O record_buffer=1M -O max_allowed_packet=30M
啟用則銀服務。
4. 回到mysqlcc,右鍵點擊/Databases/wow,開啟新窗口。
點擊新開窗口上面的SQL按鈕,再選擇菜單里的文件\打開...
打開25M的python.sql(載入需要好長時間)然後點擊按鈕欄里的「!」按鈕。
看執行成果,沒有X的就是成功了,有錯誤的話刪掉wow資料庫,從「3.」處重新開始。
5. 打開控制面板\管理工具\ODBC數據源(不同的操作系統名字可能不同)
選擇:系統DNS,添加,MySQL ODBC3.51 Driver。
Date Source Name:(2.里建立的用戶名)
Host/Server Name(or IP):localhost
DataBase Name:wow
User:(2.里建立的用戶名)
Password:(2.里建立的密碼)
6. 啟用python伺服器,但停止wow庫。把7M的python.sql和N個1K的.sql文件拷貝到c:\mysql\bin\
運行c:\mysql\bin\mysql.exe
在命令行里輸入\. python.sql
\. commands.sql
依此類推...
7. 載入完畢後啟動wow庫,運行wowpython0.89,輸入:
host 127.0.0.1(或者你的外網IP或者區域網IP)
lanhost *.*.*.*(你的區域網IP)
db localhost (你剛才「2.」建立的用戶名) (你輸入的密碼) wow
start
出現伺服器開始運行的提示後就可以運行游戲了。
注意事項:只是想單機玩的host地址隨便,lanhost用開始菜單/運行/cmd/ipconfig看到內網地址。
想區域網玩的host,lanhost都用內網IP。想架外網伺服器的就要知道自己的外網實際IP了。
8. 自己玩或者區域網內玩游戲,進游戲登陸界面後按「~」打開控制台,輸入「realmlist (你在「7.」所輸入的內網IP)」使用wow表account項裡面的GM賬號登陸游戲。
OK!架設完畢!

scripts/items.scp(物品資料與代碼)scripts/creatures.scp(npc資料與代碼)saves/players.save(玩家資料)scripts/areatrigge
scripts/items.scp(物品資料與代碼)
scripts/creatures.scp(npc資料與代碼)
saves/players.save(玩家資料)
scripts/areatriggers.scp(傳誦換場景的資料)
scripts/emu.conf(模擬器連接資料,在這里修改IP,要讓別的電腦也進來玩就改成你的IP)
saves/world.save(刷NPC的資料)
scripts/quests.scp(任務的資料)
scripts/classes.scp(應該是屬於初始的天賦)
scripts/spellcost.scp(技能代碼)
scripts/pages.scp(npc說話定義)
scripts/gameobjects.scp(游戲中物體名稱,模型號定義)
scripts/creatures.scp(npc定義)
scripts/defines.scp(應該是所有代碼編號的定義。如在spellcost.scp中寫[spell10]price=120也就是說,學習SPELL_EFFECT_HEAL(在defines.scp中的208行)需要120銅幣。)
--------------------------------------------------------------------------
emu文件

[system]
server_name=LocalServer——>伺服器名稱
server_rules=PvP
http_host=127.0.0.1——>HTTP注冊頁面(需先搭建IIS伺服器)
http_port=8080
rs_host=127.0.0.1——>填你IP
rs_port=3724
ws_host=127.0.0.1——>填你的IP就對啦
ws_port=8085
world_sleep_ms=500——>照字面來看是白天的時間
network_sleep_ms=100——>那麼這個就是晚上的時間啦
connection_timeout=300——>傳說卡號和這個有關改小就對啦
loglevel=1
save_text_ppoints=yes——>傳說修改經驗倍數要改成yes
spawns_pes_distance=64.0
max_players=100——>最大玩家數
這行貼不上來——>不知道干嗎的應該不能少就是了

[game]
linger=20——>刷怪間隔秒
npc_corpse_delay=60——>怪物屍體存在時間妙
autosave_time_minutes=30——>自動保存間隔秒
health_growing_rate=1——>回血率越大越塊
mana_growing_rate=10——>回魔率
energy_growing_rate=10——>回能量
delete_not_used_accounts_days=0——>刪除多少天未登錄的帳號

[bot]
rs_host=192.168.0.1-------------->這里填本地IP
rs_port=3724
account=WAD2
password=TEST

照以上改法,傳說內外網都能連上。
--------------------------------------------------------------------------
DB2Script文件夾中各scp文件含義——quests.scp篇

定義如下:

[quest編號]任務編號
name=SharptalonsClaw//任務名
desc=//任務提示
levels=2530//任務限制等級
zone=39//任務區域
quest_flags=08//任務標記類型
src_item=16305//任務完成所需物品編號
reward_xp=2450//任務獎勵經驗
reward_choice=60761//任務獎勵物品選擇:編號,數量
reward_choice=30701//同上
reward_choice=601//同上
deliver=1821//交付物品:編號,數量
reward_gold=25//任務獎勵金錢:銅幣
kill=610//任務需要殺目標:編號,數量

——pages.scp篇

定義如下:

[page編號]話語編號
next_page下一個話語的編號
text話語內容

——spellcost.scp篇

定義技能學習需求,含義如下:

[spell編號]//技能編號
reqspell=72//學習所需技能
price=1100//學習所需金錢,銅幣

npc訓練師那裡的限制吧。把所有的reqspell去掉,把price都改成1……

——items.scp篇

對游戲裝備的定義,含義如下:
[item編號]
skill=0//熟練度
stackable=1//可堆疊數量
name=WornShortsword//名稱
class=2//類型編號,對應defines.scp中定義
subclass=7//類別編號,對應defines.scp中定義
model=1542//模型編號
quality=1//品質
buyprice=35//買入價格
sellprice=7//賣出價格
inventorytype=21//存儲類型
classes=07FFF//使用職業限制
races=01FF//使用種族限制
level=2//物品等級
reqlevel=1//需求人物等級
damage=130//傷害
delay=1900//延遲
language=1//語言
material=1//表面貼圖
sheath=3//屬性值,這里指大武器,左手裝備
rability=20//耐久度

——gameobjects.scp篇

這個文件是對游戲中出現的怪物的定義,其含義如下:
[gameobj編號]
name=OldLionStatue//怪物名
type=2//怪物類型
model=6//所用模型
sound0=43//第一種聲音
sound1=73//第二種聲音

漢化的話,應該是在這個文件吧

——defines.scp篇

Script文件夾中的定義,都由defines.scp文件開始。這里定義了幾乎所有東西的編號。首先我們來看看這個文件的內容。

按順序是:
races節:定義種族編號。
classes節:定義職業編號。
powers節:定義能量類型編號。
classes節:(注意和前面的區分)定義裝備類型編號。
subclasses節:定義裝備類別編號。
itemtypes節:定義物品編號。
(ps:前面三個地方很容易搞混,不知道寫的時候是怎麼想的*_*)
sheathtypes節:定義武器屬性編號,如單手,雙手
slots節:定義飾品編號
creaturetypes節:npc類型編號
(接下來的節沒有名稱,汗!我們以數字n來代替)
1節:世界語言定義編號
2節:技能(魔法)效果編號定義
3節:技能(魔法)動作模型編號定義
4節:人物狀態編號定義
5節:游戲物品(城市中)編號定義
6節:表情編號定義
7節:人物動作動畫編號定義
8節:物品動畫編號定義
9節:(不是很明白)推測是砍人動作動畫的編號定義
10節:似乎是射箭動作動畫的編號定義
11節:鎖類型編號
12節:技能訓練師的編號定義

這個文件中定義了游戲世界中幾乎所有東西的編號,在下面的文件中出現的編號,都可以在這里找到。要注意的是,編號採用了2種方式。
首先是在每一節下面都是從1開始編號的。對應的調用應該是在scp文件中對應變數,寫出這個編號。如spell,在spellcost.scp文件中,寫[spell1]就表示這個魔法的效果對應2節下的編號1,同時對應3節下的編號1。
第二種是幾節都擁有順序的編號,7至10節的動畫編號定義就是這樣。在第7節中,是寫出了0x0一直到0x86,8節中之寫出了0x87,後面應該是使用得偏移量寫的,如8節中寫1就表示0x88。以此類推。

——classes.scp篇

classes.scp包含對於種族的初始化定義。以暗夜精靈為例,其含義如下:
startmap=1//Kalimdor出生地圖編號
startzone=14//Teldrassil出生地點編號
startpos=10311.3832.4631326.411.0出生地點位置
startstats=1725192020//Str,Agi,Stm,Int,Spr初始化屬性值
bodymale=55推測是男性身體高度值
bodyfemale=56推測是女性身體高度值
skill=98300300//Language:Common指種族語言
spell=668//Language:Common指spell編號
skill=113300300//Language:Darnassian指種族語言
spell=671//Language:Darnassian指spell編號
spell=019CB//Attack指spell編號
spell=81//Dodge指spell編號
skill=1621300//Unarmed
spell=203//Unarmed指spell編號
spell=20580//Shadowmeld指spell編號
spell=20582//Quickness指spell編號
spell=20583//NatureResistance指spell編號
spell=20585//WispSpirit指spell編號
//RangeAttacks遠程攻擊
spell=75//AutoShot指spell編號
spell=2764//Throw指spell編號
skill=451300//Bows
spell=264//Bows指spell編號
skill=461300//Guns
spell=266//Guns指spell編號
skill=1761300//Thrown
spell=2567//Thrown指spell編號

上面的定義中,spell是指資料庫中技能魔法的編號,而skill是指的熟練度。但是我不明白skill中3個數值的表示是什麼意思。達人指教!

——areatriggers.scp篇

areatriggers.scp文件包含世界跳轉的位置。
其含義如下:
[areatrigger編號]
note=注釋
pos=所屬地圖x坐標y坐標z坐標
topos=目標地圖目標x坐標目標y坐標目標z坐標
totrigger=目標轉換點

[areatrigger編號]定義轉換點的編號,在totrigger中使用。
note,注釋
pos,轉換點所在位置
topos,目標轉換點所在位置
totrigger,轉換到某個轉換點

一般更新都是這里的東西了看看吧也許有你想要的答案
--------------------------------------------------------------------------
如果用戶被卡主,作為GM怎麼辦?
就是說,客戶端中斷了,再連接就說此用戶已經在線了,不能登陸,作為GM怎麼解決?
我以為刷新後就可以了,結果等了半個小時也不行,怎麼辦呢?

connection_timeout=300的值設置小一點,單位是秒,一般1分半到兩分鍾就行了!

產生新NPC的方法

先知道相應NPC模板代碼比如99999
用GM賬號跑到要放導師的地方:
.addspawn99999在GM站立的地方安放一個NPC的刷新點。
.setspawndist00該刷新點刷新的怪物自主移動范圍為0-0
.setspawntime11該刷新點刷新怪物的時間間隔為1-1秒。

出現小人既刷新點
等幾秒鍾出現啦

清除刷新點的GM命令

游戲里選定你要刪除的小人,輸入.del

改經驗:
save_text_ppoints=yes
delete_not_used_accounts_days=0
cript目錄下的startup.tcl文件
setxp[expr{5*$victim_level+5}]這句
前面的5是倍數,後面的5是直接得到的經驗,改哪個都可以
if{$lvldiff<=-5}{return0}
-5是怪少與你5級就沒經驗,你可以該多點,這樣就不會打一隻怪升了很多級再打沒經驗了

關於HP,MP及存檔不能正常設置:
1,打開DB2.0安裝文件夾
2,打開scripts子文件夾
3,打開emuCONT文件,按照「辦法」修改。
大家可能只是修改了主文件夾下的emuCONT,所以造成無法存檔現象。

如何保存

CTRL+C之後過幾秒顯示saveing的提示後會自動關閉請注意
或者GM號進游戲打.save

如何聯機或者說如何做伺服器讓人玩

琢磨一下emu文件上面有詳細解釋

我想把卡號的移動到我身邊該用什麼命令呢?

.goname人物名-你飛到該人物身旁
.namego人物名-把該人物拉到你身旁

我想玩生產系的。請問怎麼樣改資源的刷新速度

舉個例子來說吧:
輸入
.addspawn
.setspawngo1731//加一個coppervein銅礦
.setspawntime100200//100-200秒重新生成,你改小就可以刷的快了
.setspawndist100200//每次重刷的距離在100-200尺,這可以避免礦一直出現在同一地方

server_name=LocalServer——>伺服器名稱
http_host=127.0.0.1——>HTTP注冊頁面(需先搭建IIS伺服器)
delete_not_used_accounts_days=0——>刪除多少天未登錄的帳號
(1)伺服器:先去本論壇的[伺服器下載區]下載最新的JAVAWOW伺服器或者WAD伺服器,如果您使用的是以前的伺服器版本,強烈建議你重新下載。因為技術是一個發展的過程,越新的伺服器功能越強大,BUG也越少。
(2)客戶端:建議購買9C發售的中文客戶端,至於為什麼,不說也知道的。如果你英文實在很好,好到每個物品每個NPC你都能翻譯的話,那就可以不聽我的勸告了。官方網站上有客戶端下的。嫌下得慢的話可以去買,很便宜的。
(3)兩個都安裝好,不一定要在同一目錄。
(4)修改客戶端目錄下的 realmlist.wtf (用記事本打開)文件中的 IP地址為自己的IP,例如 單機的就改成 set realmlist 127.0.0.1 要進區域網的 就改成 set realmlist xxx.xxx.xxx.xxx 其中的xxx.xxx.xxx.xxx是你的區域網IP。

(5)配置你的IP設置 ,啟動伺服器文件夾下的 IP-Configuration.exe 修改,把所有看得的IP全改成自己的。

(5)好了,現在可以啟動伺服器了。主程序是WoWemu.exe或者是No Read map 1.3.1V1.8.exe。
(6)啟動後會出現一個DOS窗口,稍等,......
(7)9:26:13:M:Loading world...
9:26:13:M:Loading PP...
9:26:13:M:done, 365635 ppoints.
好了,到這里就完全啟動好了。
(8)打開http://你的IP:8080 注冊賬號。單機的話是http://127.0.0.1:8080,也可以用伺服器文件夾下的Account Creator.exe 創建賬號和GM賬號。
(9)區域網玩家要進你的伺服器的機器,必須按第四步中的方法修改
set realmlist 你的IP 。
(10)好了,邀請你的好友一起體驗吧

. usr hp 〈hp〉 〈max hp〉 : 改變HP選擇的用戶唯一.
.usr mana 〈mana〉 〈max mana〉 : 改變選擇的用戶mana .
.usr gold 〈num〉 : 改變選擇的用戶金錢..usr lvl 〈num〉 : 改變選擇的用戶的標准.
.usr speed 〈num max 30〉 : 改變選擇的用戶的speed.
.usr wspeed 〈num max 30〉 : 改變選擇的用戶的wspeed.
.usr scale 〈num .02-4〉 : 改變選擇的用戶的 scale.
.usr mount 〈id 1-64〉 : 改變選擇的用戶的登入.
.usr exp 〈exp〉 : 改變選擇的用戶的EXP.
.usr aura 〈aura id〉 : 改變選擇的用戶的aura.
.usr spell 〈spell id〉 :增加一個咒語 .
.usr skin 〈skin id〉 : 改變選擇的用戶的Skin.
.usr talentxp 〈num〉 : 增加天分點.

.gm pass 〈oldpass〉 〈newpass〉 : 改變您真正的通行證為帳戶lvl .
.gm off : 取消顯示〈GM〉用戶
.gm on : 增加顯示〈GM〉用戶
.gm kick 〈name〉 : 踢命名的用戶.
.gm save : 保存.
.gm announce 〈message〉 : 寄發一則消息到世界.

.move where : 移動您給的座標.
.move there 〈name〉 : 移動到命名的用戶.
.move here 〈name〉 : 移動命名的用戶到您著.
.move fast 〈x〉 〈y〉 〈z〉 :向您座標移動.
.move world 〈x〉 〈y〉 〈z〉 〈m〉 :向您座標移動和地圖.
.move town 〈town〉 : 移動您鍵入的鎮.
.move prog : 移動您向程序員小島.
.move isle :移動您向管理員小島.

.npc info :顯示信息在選擇的npc .
.npc mobs 〈modelid〉 〈npcflags〉 〈faction〉 〈level〉 〈name〉 : 產生NPC在你的位置.
.npc taxi : 增加一輛出租汽車.
.npc spell 〈spellid〉 〈price〉 :增加一個咒語來教練員NPC .
.npc rmvspell 〈spellid〉 :從教練員取消咒語NPC .
.npc item 〈itemid〉 〈amount〉 :增加一個項目來教練員NPC .
.npc rmvitem 〈itemid〉 :從教練員去除項目NPC .
.npc itemmove 〈srcslot〉 〈dstslot〉 : 搬入項目販賣者NPC .
.npc delete :刪除NPC.
.npc level 〈level〉 : 改變選擇的NPC 的標准.
.npc skin 〈skinid〉 : 改變選擇的NPC 皮膚.
.npc faction 〈faction〉 :改變選擇的NPC 的派別.
.npc name 〈name〉 :更改選擇的NPC 的名字.
.npc flag 〈flag〉 : 改變選擇的NPC 旗子.
.npc animfreq 〈frequency〉 : 改變選擇的NPC 頻率.
.npc random 〈num 0-1〉 :集合任意開關選擇的NPC .
.npc addmove :增加一個小站或設置NPC.
.npc run 〈num 0-1〉 : 設置奔跑開關選擇的NPC .
.npc state 〈num 0-2〉 :設置如果選擇的NPC NPC 意志自動攻擊.
.npc scale 〈num〉 :選擇的NPC集合scale.
.npc hpmin 〈num〉 : 設置選擇的NPC最小HP .
.npc hpmax 〈num〉 : 設置選擇的NPC最大HP .

.admin ban 〈name〉 :禁令命名的用戶從伺服器
.admin lvl 〈name〉 〈lvl account〉 :改變命名的用戶lvl 帳戶.
.admin addspirit : 增加一種Spirit來世界.
.admin die :使用戶死
.admin revive :使用戶復活
.admin update 〈old〉 〈new〉 : 更新Opcodes

.addgo : 在你的坐標添加游戲對象
.add : 添加項目到你的背包中.
.addnpc : 添加NPC到游戲.
.del : 刪除目標NPC
.setlevel : 設置個人或NPC的等級
.setmodel : 給NPC或個人設置模型數量.
.learn : 學習魔法的數目
.save : 保存文件.
.rehash : 改寫目標.
.flag1 : 設置有毛病的標記.
.ppon : 打開pp系統.
.ppoff :關閉pp系統.
.turn : 轉動NPC面朝你.
.come : NPC來到你的位置.
.go : 去世界坐標.
.gotrigger: 進入世界范圍的位置,參數: trigger_number
.kill : 殺死選擇的NPC或個人.
.killallnpc : 殺死所有的NPC的形象.
.resurrect : 復活選擇的個人.
.setsize : 設置NPC的大小.
.setspeed : 設置NPC或個人的速度
.setflags : 設置NPC或O.G的面具. 參數: 〈ftype〉 〈flags〉
.addspawn : 添加大量的點到你的位置. 參數 : [〈npc entry〉] [〈npocs number〉]
.setnpcspawn : 添加條目和數目作成大量NPC到大量的點
.setnpcgo : 設置條目由於大量游戲目標到大量點
.setspawndist : 設置小和大距離到大量
.setspawntime : 設置小和大的時間到大量.
.setxp : 設置經驗到個人.
.paralyse : 不動和動到個人或NPC.
.setaura : 設置預兆數目
.exploration : 打開你地圖的位置.
.dismount : 卸下你.
.listsp :列出你的魔法.
.listsk :列出你的技能.
.delsp : 忘記魔法
.delsk : 忘記技能.
.info : 附近NPC的信息.
.online : 顯示在線玩家數目
.goname : 移動到輸入名字的個人或NPC.
.goguid : 移動到行會.
.targetgo : 嘗試移動到最近的玩家(定位最近的object)
.targetlink : 嘗試到連接目標OF選擇目標
.move :傳送目標.
.retcl : 重裝TCL
.rescp : 重裝 SCP.
.clearqflags : 清楚尋找標記
.bytes : for debug
.pingmm : 製造點在你的地圖
.adddyn : 測試到競技

1.架設伺服器必須安裝的NET Framework 2.0.exe

2.首先修改服務端內的wowemu.key文件
server_name=Dokj 這行是伺服器名稱,假如要中文,請先用"漢字轉"轉換下
ws_host=127.0.0.1 這里是伺服器IP,可以用域名
ws_port=8085

3.然後打開maps文件夾,運行BatCreator.exe,然後選擇Locate the folder with wow.exe指定一下客戶端的路徑,選好後按一下Create,再按Extract,中途需要按兩次y確認,第二次輸入y以 後窗口會自動關閉.

4.接下來打開scripts文件夾內的emu.conf文件,用記事本打開
[banned]
//ip=127.0.0.1/255.255.255.0 在127.0.0.1的地方輸入IP,默認是單機的

5.賬號可以通過服務端自帶的DButil.exe程序進行添加,打開後選擇
Edit Accounts,方法是:Find的左邊的空格內輸入賬號,password是密碼,plevel
是GM許可權等級,6是最高,然後按一下Add就可以了(注意:添加賬號必須在伺服器開啟以後才行)

6.運行服務端程序WoWemu.exe,等待一段時間後,伺服器就開好了.

7.客戶端需要打補丁.我試過不打補丁就出現版本無法嚴正的錯誤

把"登陸器"解壓到客戶端,然後運行"SF補丁安裝程序.bat",結束以後.用記事本打開realmlist.wtf,修改裡面的IP,改成你的伺服器IP,改完後運行wow.exe就可以進入游戲了,別忘了啟動游戲後用DButil.exe添加賬號..

8.這是最重要的一點.請大家每次關閉伺服器之前.輸入".save"保存一下,不然下次開F以後所有東西都會沒有的,比如賬號..切記!!!!!!

㈨ python有1000個url請求 放到queue 再十個線程 這樣輸出的數據是亂的 必須加鎖么

題主的問題表述不清,尤其十個線程做了哪些工作沒說明,我從字面猜測,是把1000個url放在隊列里,然後十個線程從隊列中取出url,請求之後,調用輸出函數。
先說隊列的問題,通常的設計里,queue只在添加元素,摘取元素的時候內部加鎖,以保證隊列數據不出錯,至於從queue中取出數據後怎麼處理,要不要放臨界區,queue是不管的,也不應該管,python的Queue模塊提供了相應的Queue類。
再說輸出結果是亂的,又是表述不清,如果你指的是最終輸出到一個文件里,文件內容亂了,那給你4種解決辦法:
1. 線程里每個url在請求到內容後,在寫文件時設立臨界區,保證串列輸出,強烈不建議這種方式。
2. 對每個url的請求內容寫一個文件,最後合並文件,這種最靈活。
3. 對每個工作線程的輸出寫一個文件,最後合並文件,最有並行style
4. 對每個url的請求內容再次寫到一個隊列里,另一個線程讀取此隊列寫文件,最有設計模式style
如果你要保證輸出結果是與輸入url同序的,建議你採用上面第2種辦法,合並文件的時候保證與url隊列同序

㈩ Python 包管理工具

  Python之所以受歡迎不光是因為它簡單易學,更重要的是它有成千上萬的寶藏庫。這些庫相當於是已經集成好的工具,只要安裝就能在Python里使用。它們可以處理各式各樣的問題,無需你再造輪子,而且隨著社區的不斷更新維護,有些庫越來越強大,幾乎能媲美企業級應用。那麼這些工具庫怎麼下載安裝呢?它們被放在一個統一的「倉庫」里,名叫PyPi(Python Package Index),所有的庫安裝都是從這里調度。有了倉庫之後,還需要有管理員,pip就是這樣一個角色。

  pip 是 Python 中的標准庫管理器,這意味著它是一個工具,用它可以來管理 Python 標准庫中其他的包,允許你安裝和管理不屬於 Python 標准庫的其它軟體包,其提供了對 Python 包的查找、下載、安裝、卸載等功能。總的來說,pip的Python第三方庫的大管家,搞懂它,會讓你省很多事。從Python 3 >= Python 3.4 、Python2 >= Python2.7.9 版本開始,pip默認包含在Python的安裝程序中,在安裝Python時將會自動被安裝,省事方便。

  Python 的安裝器中自帶了 pip,所以你可以直接使用它,除非你安裝的是更早版本的 Python。你可以通過以下命令來判斷是否已安裝:

如果你的 Python 環境沒有安裝 pip,則可以使用以下方法來手動安裝。pip 安裝文件下載: pypi.org/project/pip…

pip提供的命令不多,但是都很實用

  pip命令默認使用的是國外的pypi鏡像(pypi.python.org),安裝慢不說,有時甚至會導致出現超時等網路問題,有時候為了安裝一個包,失敗重試安裝好幾次都不一定成功。所以,使用國內的pypi鏡像,亦即 切換 pip 源 ,這樣速度上更有保證,不失為一種加速pip安裝第三方包的好方法。常用的鏡像站有阿里雲、清華大學等。其中清華大學開源軟體鏡像站是每 5 分鍾同步一次的,比較推薦使用。阿里雲鏡像站的速度也非常快,這也是我現在在使用的。

  切換切換 pip 源可以是臨時性的,也可以設置為默認。臨時性的,就是在安裝包時,通過pip命令的 -i 選項指定鏡像源即可。例如,臨時使用阿里雲鏡像站作為 pip 源,可以是這樣安裝:

  如果每次安裝時都想要通過鏡像源來安裝,上面的辦法不免有些麻煩。我們可以修改pip的配置文件,將鏡像源寫入到 pip 配置文件中。 對於linux系統 ,修改 ~/.pip/pip.conf 文件 (沒有就創建一個文件夾及文件,文件夾要加「.」,表示是隱藏文件夾):

然後在文件中保存如下內容:

   對於windows系統 ,在C:Users文件夾下的用戶目錄(例如如果當前用戶是Administrator則是C:UsersAdministrator)下創建pip文件夾,然後再在此文件夾下創建pip.ini文件,在文件中寫入一下內容:

  配置完成後再通過 pip config list 查看pip配置。

  我們經常會遇到這樣的開發需求,比如你手頭有多個開發項目,其中項目A要求用python3.7,項目B需要用python3.6,有要求項目A和項目B依賴包相互獨立,互不幹擾。為了滿足這樣的開發需求,我們需要在自己的電腦上安裝多個Python版本,並且項目之間進行環境隔離。因此,我們要想運行這些項目,在工作電腦上就要安裝不同版本的Python。 pyenv 是Python版本管理工具,通過系統修改環境變數來實現Python不同版本的切換,利用它可以在同一台電腦上安裝多個版本的Python,設置目錄級別的Python,還能創建和管理vitual python enviroments。而且所有的設置都是用戶級別的操作,不需要sudo命令。

  首先安裝pyenv,如果你是Mac電腦,那麼推薦使用Homebrew來安裝。

要想升級pyenv,則可以執行:

pyenv安裝完成後,需要將$HOME/.pyenv/bin添加到PATH變數前面,這一步非常關鍵。

也可以採用手動安裝的方式,將pyenv檢出到你想安裝的目錄。

  添加環境變數,將PYENV_ROOT 指向 pyenv 檢出的根目錄,並向 $PATH 添加 $PYENV_ROOT/bin 以提供訪問 pyenv命令的路徑。這里的 shell 配置文件(~/.bash_profile)依不同系統而需作修改,如果使用 Zsh 則需要相應的配置 ~/.zshrc
在使用 pyenv 之後使用 pip 安裝的第三方模塊會自動安裝到當前使用 python 版本下,不會和系統模塊產生沖突。使用 pip 安裝模塊之後,如果沒有生效,記得使用 pyenv rehash 來更新。

安裝完pyenv,可以安裝Python,首先查看可安裝的Python版本:pyenv install -l,接下來開始安裝Python

執行命令 pyenv versions 查看安裝結果。

可以看到,已經成功安裝了Python,安裝的位置在 /Users/dllwh/.pyenv。

可以看到,3.9.9 前面有一個星號,說明成功切換到了 3.9.9 版本,可以執行一下python來驗證。

  Pipenv 是 Python 官方推薦的包管理工具,它綜合了 virtualenv、pip 和 pyenv 三者的功能,你可以使用 pipenv 這一個工具來安裝、卸載、跟蹤和記錄依賴性,並創建、使用和組織你的虛擬環境。

如果你是Mac電腦,那麼推薦使用Homebrew來安裝和升級pipenv:

也可以通過pip來安裝和升級pipenv:

進入到項目目錄中,通過下面的指令為項目創建虛擬環境。

  上面的操作,給pipenv_demo這個項目初始化了一個 Python 3.9.9 的虛擬環境,並在項目錄下生成一個項目依賴包文件 Pipefile。如果系統中沒有 3.9.8 版本的Python,pipenv 會調用 pyenv 來安裝對應的 Python 的版本。默認地,虛擬環境會創建在 ~/.local/share/virtualenvs目錄裡面。我們也可以通過 pipenv --venv查看項目的虛擬環境目錄。可以通過 pipenv --rm 刪除虛擬環境。
如果想更改虛擬環境的目錄,可以在 .bashrc 或 .bash_profile 中,設置環境變數WORKON_HOME,指定虛擬環境的目錄所在位置,比如想將虛擬環境放到~/.venvs目錄,則可以執行下面的命令。

如果希望在項目目錄下創建虛擬環境目錄(.venv),需要在 .bashrc 或 .bash_profile 中配置環境變數PIPENV_VENV_IN_PROJECT:

  pipenv使用 Pipfile 和 Pipfile.lock 來管理依賴包,並且在使用pipenv添加或刪除包時,自動維護 Pipfile 文件,同時生成 Pipfile.lock 來鎖定安裝包的版本和依賴信息。相比pip需要手動維護requirements.txt 中的安裝包和版本,具有很大的進步。

  為項目安裝依賴包到虛擬環境中,使每個項目擁有相互獨立的依賴包,是非常不錯的Python的開發實踐。安裝依賴包到虛擬環境中的方法:

執行完上面的命令後,檢查一下是否安裝成功:

  觀察項目的根目錄下,又多了一個 Pipfile.lock 文件。這兩個文件記錄了此項目的依賴包,這兩個文件的區別是 Pipfile 中安裝的包不包含包的具體版本號,而Pipfile.lock 是包含包的具體的版本號的。如果不想產生 Pipfile.lock 文件,在安裝依賴包的時候,加上 –skip-lock 選項即可。
在使用pipenv的時候,常常會安裝過程比較慢,這個是因為pipenv創建的 Pipfile 中默認的Pypi源是python官方的 pypi.python.org/simple。我們國內…

  為了避免每次都要指定–pypi-mirror,我一般會在創建好Pipfile以後,將文件中 source 塊下的 url 欄位,設置為國內的 pypi 源,我推薦的是清華的Pypi源或者阿里源,具體設置如下:

如果是要刪除虛擬環境中的第三方包,執行:

用git管理項目時候,要把Pipfile和Pipfile.lock加入版本跟蹤。這樣clone了這個項目的同學,只需要執行:

就可以安裝所有的Pipfile中 [packages]部分列出來的包了,並且自動為項目在自己電腦上創建了虛擬環境。

上面的方法都是安裝Pipfile中列出來的第三方包的最新版本,如果是想安裝Pipfile.lock中固定版本的第三方依賴包,需要執行:

如果項目之前使用requirements.txt來管理依賴的,那麼使用pipenv安裝所有依賴可以採用類似pip的方法:

  虛擬環境創建好了之後,就可以在裡面進行開發了。如果在命令行下開發,則在項目目錄下執行 pipenv shell ,就進入到了虛擬環境中,在這個環境中,已經包含安裝過的所有依賴包了,接下來就可以利用這些依賴包進行開發工作了。如果是用Pycharm進行開發,就更簡單了,直接用Pycharm打開項目即可。可以從Pycharm中的左側導航欄裡面看到External Libraries顯示的是虛擬環境中的Python解釋器了。
在虛擬環境中執行開發好的程序,有兩種方式,一種是前面提到的先執行pipenv shell進入到虛擬環境後,再執行python程序;另一種方式,則是執行pyenv run,比如在虛擬環境中執行基於pytest框架編寫的測試用例,只需要執行下面的命令即可:


作者:獨淚了無痕
鏈接:https://juejin.cn/post/7063699409703272485

熱點內容
pythonid3 發布:2025-07-17 13:31:50 瀏覽:325
文件被加密如何破解 發布:2025-07-17 13:31:50 瀏覽:29
網路編程經驗 發布:2025-07-17 13:13:20 瀏覽:67
學編程小孩 發布:2025-07-17 13:13:16 瀏覽:997
關電源能釋放緩存嗎 發布:2025-07-17 13:07:14 瀏覽:932
哪個moba配置要求較低 發布:2025-07-17 13:05:34 瀏覽:799
scratch編程視頻教學 發布:2025-07-17 12:50:36 瀏覽:636
linuxh264 發布:2025-07-17 12:20:12 瀏覽:481
主題密碼怎麼改 發布:2025-07-17 12:18:08 瀏覽:605
南京編譯中心招聘 發布:2025-07-17 12:18:08 瀏覽:962