我们在编写多线程程序的时候,往往会遇到两种类型的变量。
一种是全局变量,多个线程共享。为了避免改乱为,我们在前面已经提到说要加锁。
一种是局部变量。仅供一个线程使用,线程间相互不影响。
例如下列程序中task()
函数中定义的count
变量就是局部变量。即使我们创建了两个线程,两者的count
递增也不会相互影响,因为count
是在task
中定义的。
import threading def task(): count = 0 for i in range(1000): count += 1 print count if __name__ == '__main__': t1 = threading.Thread(target=task) t1.start() t2 = threading.Thread(target=task) t2.start()
那么,这么处理是不是就完美了呢?其实还不是。
以上的例子我们举的是一个非常简单的例子,但是我们遇到一个比较复杂的业务逻辑的时候,比如多个局部变量,函数多重调用等,这么定义局部变量就会变得不简洁,麻烦。
函数多重调用是指,例如:
我们定义了函数,methodA(),这个方法体内调用了methodB(), methodB()方法体中又调用了methodC()...
如果我们在某一个线程中调用了methodA()并且使用了一个变量attr,那么我们就需要将attr一层一层地传递给后续的函数。
有没有一种方法,能让我们在线程中定义一个变量后,那么这个线程中的函数就都能调用,如此才叫简洁明了?
Python为我们做到了,那就是ThreadLocal.
ThreadLocal的用法只需要三步:
定义一个对象 threading.local
在线程内给该对象绑定参数。所有绑定的参数都是线程隔离的。
在线程内调用。
下面展示一下代码:
# coding=utf-8 import threading local = threading.local() # 创建一个全局的对象 def task(): local.count = 0 # 初始化一个线程内变量,该变量线程间互不影响。 for i in range(1000): count_plus() def count_plus(): local.count += 1 print threading.current_thread().name, local.count if __name__ == '__main__': t1 = threading.Thread(target=task) t1.start() t2 = threading.Thread(target=task) t2.start()
更多python学习笔记 - ThreadLocal 相关文章请关注PHP中文网!

PythonArraysSupportVariousoperations: 1) SlicingExtractsSubsets, 2) Menambah/ExtendingAddSelements, 3) InsertingPlaceSelementSatSatSatSpecifics, 4) RemovingDeleteselements, 5) Sorting/ReversingChangesOrder,

NumpyarraysareessentialforapplicationRequiringeficientnumericalcomputationsanddatamanipulation.theyarecrucialindaSascience, machinelearning, fizik, kejuruteraan, danfinanceduetotheirabilitytOHandlelarge-Scaledataefisien.Forexample, infinancialanal

UseanArray.arrayoveralistinpythonwhendealingwithhomogeneousdata, criticalcode prestasi, orinterfacingwithccode.1) homogeneousdata: arrayssavemememorywithtypedelements.2)

Tidak, notalllistoperationsaresuportedByArrays, andviceversa.1) arraysdonotsupportdynamicoperationslikeappendorinsertwithoutresizing, whyimpactsperformance.2) listsdonotguaranteeconstantTimeComplexityFordirectacesscesscesscesscesscesscesscesscesscesessd.

ToaccesselementsinaPythonlist,useindexing,negativeindexing,slicing,oriteration.1)Indexingstartsat0.2)Negativeindexingaccessesfromtheend.3)Slicingextractsportions.4)Iterationusesforloopsorenumerate.AlwayschecklistlengthtoavoidIndexError.

Arraysinpython, terutamanya yang, arecrucialinscientificificputingputingfortheirefficiencyandversatility.1) mereka yang digunakan untuk

Anda boleh menguruskan versi python yang berbeza dengan menggunakan Pyenv, Venv dan Anaconda. 1) Gunakan pyenv untuk menguruskan pelbagai versi python: Pasang pyenv, tetapkan versi global dan tempatan. 2) Gunakan VENV untuk mewujudkan persekitaran maya untuk mengasingkan kebergantungan projek. 3) Gunakan Anaconda untuk menguruskan versi python dalam projek sains data anda. 4) Simpan sistem python untuk tugas peringkat sistem. Melalui alat dan strategi ini, anda dapat menguruskan versi Python yang berbeza untuk memastikan projek yang lancar.

Numpyarrayshaveseveraladvantagesoverstanderardpythonarrays: 1) thearemuchfasterduetoc-assedimplementation, 2) thearemorememory-efficient, antyedlargedataSets, and3) theyofferoptimized, vectorizedfuncionsformathhematicalicalicalicialisation


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).
