Hướng dẫn python get thread id - python lấy id chuỗi

246

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi có một chương trình Python đa luồng và chức năng tiện ích, writeLog[message], viết ra một dấu thời gian theo sau là tin nhắn. Thật không may, tệp nhật ký kết quả không đưa ra dấu hiệu nào về chủ đề nào đang tạo tin nhắn nào.

Tôi muốn writeLog[] có thể thêm một cái gì đó vào tin nhắn để xác định chủ đề nào đang gọi nó. Rõ ràng tôi chỉ có thể làm cho các chủ đề truyền thông tin này vào, nhưng đó sẽ là công việc nhiều hơn. Có một số chủ đề tương đương với

import ctypes
libc = ctypes.cdll.LoadLibrary['libc.so.6']

# System dependent, see e.g. /usr/include/x86_64-linux-gnu/asm/unistd_64.h
SYS_gettid = 186

def getThreadId[]:
   """Returns OS thread id - Specific to Linux"""
   return libc.syscall[SYS_gettid]
0 mà tôi có thể sử dụng?

Ivanleoncz

8.0774 Huy hiệu vàng53 Huy hiệu bạc48 Huy hiệu đồng4 gold badges53 silver badges48 bronze badges

Khi được hỏi ngày 28 tháng 5 năm 2009 lúc 9:04May 28, 2009 at 9:04

Charles Andersoncharles AndersonCharles Anderson

18,5K13 Huy hiệu vàng56 Huy hiệu bạc73 Huy hiệu đồng13 gold badges56 silver badges73 bronze badges

Sử dụng mô -đun ghi nhật ký, bạn có thể tự động thêm định danh luồng hiện tại trong mỗi mục nhập nhật ký. Chỉ cần sử dụng một trong các phím ánh xạ logrecord này trong chuỗi định dạng logger của bạn:

%[Chủ đề] D: ID luồng [nếu có].

%[ThreadName] S: Tên chủ đề [nếu có].

và thiết lập trình xử lý mặc định của bạn với nó:

logging.basicConfig[format="%[threadName]s:%[message]s"]

Đã trả lời ngày 1 tháng 3 năm 2010 lúc 17:19Mar 1, 2010 at 17:19

2

Hàm

import ctypes
libc = ctypes.cdll.LoadLibrary['libc.so.6']

# System dependent, see e.g. /usr/include/x86_64-linux-gnu/asm/unistd_64.h
SYS_gettid = 186

def getThreadId[]:
   """Returns OS thread id - Specific to Linux"""
   return libc.syscall[SYS_gettid]
1 trả về một số nguyên dài trên Linux. Nó không thực sự là một ID chủ đề.

Tôi sử dụng phương thức này để thực sự nhận ID luồng trên Linux:

import ctypes
libc = ctypes.cdll.LoadLibrary['libc.so.6']

# System dependent, see e.g. /usr/include/x86_64-linux-gnu/asm/unistd_64.h
SYS_gettid = 186

def getThreadId[]:
   """Returns OS thread id - Specific to Linux"""
   return libc.syscall[SYS_gettid]

Đã trả lời ngày 23 tháng 2 năm 2012 lúc 9:17Feb 23, 2012 at 9:17

Brucexinbrucexinbrucexin

3953 Huy hiệu bạc5 Huy hiệu Đồng3 silver badges5 bronze badges

6

Đã trả lời ngày 12 tháng 5 năm 2019 lúc 17:26May 12, 2019 at 17:26

Jake Teslerjake TeslerJake Tesler

3644 Huy hiệu bạc5 Huy hiệu Đồng4 silver badges5 bronze badges

Bạn có thể nhận được danh tính của chuỗi chạy hiện tại. Nhận dạng có thể được sử dụng lại cho các luồng khác, nếu luồng hiện tại kết thúc.

Khi bạn không thể hiện được một ví dụ, một tên được đưa ra ẩn cho luồng, đó là mẫu: số luồng

Tên không có ý nghĩa và tên không phải là duy nhất. Nhận dạng của tất cả các chủ đề đang chạy là duy nhất.

import threading


def worker[]:
    print[threading.current_thread[].name]
    print[threading.get_ident[]]


threading.Thread[target=worker].start[]
threading.Thread[target=worker, name='foo'].start[]

Chức năng luồng.Current_Thread [] trả về luồng chạy hiện tại. Đối tượng này giữ toàn bộ thông tin của chủ đề.

Đã trả lời ngày 8 tháng 3 năm 2019 lúc 9:46Mar 8, 2019 at 9:46

DeaD_EyEDeaD_EyEDeaD_EyE

3844 Huy hiệu bạc8 Huy hiệu đồng4 silver badges8 bronze badges

Tôi đã thấy các ví dụ về ID chủ đề như thế này:

class myThread[threading.Thread]:
    def __init__[self, threadID, name, counter]:
        self.threadID = threadID
        ...

Mô -đun luồng tài liệu cũng liệt kê thuộc tính

import ctypes
libc = ctypes.cdll.LoadLibrary['libc.so.6']

# System dependent, see e.g. /usr/include/x86_64-linux-gnu/asm/unistd_64.h
SYS_gettid = 186

def getThreadId[]:
   """Returns OS thread id - Specific to Linux"""
   return libc.syscall[SYS_gettid]
2:

...

A thread has a name. 
The name can be passed to the constructor, 
and read or changed through the name attribute.

...

Thread.name

A string used for identification purposes only. 
It has no semantics. Multiple threads may
be given the same name. The initial name is set by the constructor.

Đã trả lời ngày 28 tháng 5 năm 2009 lúc 9:11May 28, 2009 at 9:11

Mikumikumiku

175K46 Huy hiệu vàng303 Huy hiệu bạc 307 Huy hiệu đồng46 gold badges303 silver badges307 bronze badges

Tôi đã tạo nhiều luồng trong Python, tôi đã in các đối tượng luồng và tôi đã in ID bằng biến

import ctypes
libc = ctypes.cdll.LoadLibrary['libc.so.6']

# System dependent, see e.g. /usr/include/x86_64-linux-gnu/asm/unistd_64.h
SYS_gettid = 186

def getThreadId[]:
   """Returns OS thread id - Specific to Linux"""
   return libc.syscall[SYS_gettid]
3. Tôi thấy tất cả các ID đều giống nhau:




Đã trả lời ngày 19 tháng 6 năm 2015 lúc 5:31Jun 19, 2015 at 5:31

1

Tương tự như @BrucExin, tôi cần phải có nhận dạng luồng cấp hệ điều hành [trong đó!

---- 8< ---- [xos.pyx]
"""module xos complements standard module os""" 

cdef extern from "":                                                             
    long syscall[long number, ...]                                                              
    const int SYS_gettid                                                                        

# gettid returns current OS thread identifier.                                                  
def gettid[]:                                                                                   
    return syscall[SYS_gettid]                                                                  

---- 8< ---- [test.py]
import pyximport; pyximport.install[]
import xos

...

print 'my tid: %d' % xos.gettid[]

Điều này phụ thuộc vào Cython mặc dù.

Đã trả lời ngày 7 tháng 3 năm 2018 lúc 13:04Mar 7, 2018 at 13:04

Kirrkirrkirr

3614 Huy hiệu bạc6 Huy hiệu Đồng4 silver badges6 bronze badges

2

Bài Viết Liên Quan

Chủ Đề