summaryrefslogtreecommitdiffstats
path: root/python/psutil/TODO
blob: a5df809d023a2ec59c5ad5690e8617e95a97fd5b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
TODO
====

A collection of ideas and notes about stuff to implement in future versions.
"#NNN" occurrences refer to bug tracker issues at:
https://github.com/giampaolo/psutil/issues


HIGHER PRIORITY
===============

 * OpenBSD support.

 * #371: CPU temperature (apparently OSX and Linux only; on Linux it requires
   lm-sensors lib).

 * #269: expose network ifaces RX/TW queues. This should probably go into
   net_if_stats(). Figure out on what platforms this is supported:
   Linux: yes
   Others: ?

 * Process.threads(): thread names; patch for OSX available at:
   https://code.google.com/p/plcrashreporter/issues/detail?id=65

 * Asynchronous psutil.Popen (see http://bugs.python.org/issue1191964)

 * (Windows) fall back on using WMIC for Process methods returning AccessDenied

 * #613: thread names.

 * #604: emulate os.getloadavg() on Windows

 * #269: NIC rx/tx queue.


LOWER PRIORITY
==============

 * #355: Android support.

 * #276: GNU/Hurd support.

 * #429: NetBSD support.

 * DragonFlyBSD support?

 * AIX support?

 * examples/taskmgr-gui.py (using tk).

 * system-wide number of open file descriptors:
    * https://jira.hyperic.com/browse/SIGAR-30
    * http://www.netadmintools.com/part295.html

 * Number of system threads.
    * Windows: http://msdn.microsoft.com/en-us/library/windows/desktop/ms684824(v=vs.85).aspx

 * #357: what CPU a process is on.

  * Doc / wiki which compares similarities between UNIX cli tools and psutil.
   Example:
   df -a  ->  psutil.disk_partitions
   lsof   ->  psutil.Process.open_files() and psutil.Process.open_connections()
   killall->  (actual script)
   tty    ->  psutil.Process.terminal()
   who    ->  psutil.users()


DEBATABLE
=========

 * psutil.proc_tree() something which obtains a {pid:ppid, ...} dict for
   all running processes in one shot. This can be factored out from
   Process.children() and exposed as a first class function.
   PROS: on Windows we can take advantage of _psutil_windows.ppid_map()
   which is faster than iterating over all pids and calling ppid().
   CONS: examples/pstree.py shows this can be easily done in the user code
   so maybe it's not worth the addition.

 * advanced cmdline interface exposing the whole API and providing different
   kind of outputs (e.g. pprinted, colorized, json).

 * [Linux]: process cgroups (http://en.wikipedia.org/wiki/Cgroups). They look
   similar to prlimit() in terms of functionality but uglier (they should allow
   limiting per-process network IO resources though, which is great). Needs
   further reading.

 * Should we expose OS constants (psutil.WINDOWS, psutil.OSX etc.)?

 * Python 3.3. exposed different sched.h functions:
   http://docs.python.org/dev/whatsnew/3.3.html#os
   http://bugs.python.org/issue12655
   http://docs.python.org/dev/library/os.html#interface-to-the-scheduler
   It might be worth to take a look and figure out whether we can include some
   of those in psutil.
   Also, we can probably reimplement wait_pid() on POSIX which is currently
   implemented as a busy-loop.

 * Certain systems provide CPU times about process children. On those systems
   Process.cpu_times() might return a (user, system, user_children,
   system_children) ntuple.
   * Linux: /proc/{PID}/stat
   * Solaris: pr_cutime and pr_cstime
   * FreeBSD: none
   * OSX: none
   * Windows: none

 * ...also, os.times() provides 'elapsed' times as well.

 * ...also Linux provides guest_time and cguest_time.

 * Enrich exception classes hierarchy on Python >= 3.3 / post PEP-3151 so that:
   - NoSuchProcess inherits from ProcessLookupError
   - AccessDenied inherits from PermissionError
   - TimeoutExpired inherits from TimeoutError (debatable)
   See: http://docs.python.org/3/library/exceptions.html#os-exceptions

 * Process.threads() might grow an extra "id" parameter so that it can be
   used as such:

    >>> p = psutil.Process(os.getpid())
    >>> p.threads(id=psutil.current_thread_id())
    thread(id=2539, user_time=0.03, system_time=0.02)
    >>>

   Note: this leads to questions such as "should we have a custom NoSuchThread
   exception? Also see issue #418.

   Note #2: this would work with os.getpid() only.
   psutil.current_thread_id() might be desirable as per issue #418 though.

  * should psutil.TimeoutExpired exception have a 'msg' kwarg similar to
    NoSuchProcess and AccessDenied? Not that we need it, but currently we
    cannot raise a TimeoutExpired exception with a specific error string.

  * process_iter() might grow an "attrs" parameter similar to Process.as_dict()
    invoke the necessary methods and include the results into a "cache"
    attribute attached to the returned Process instances so that one can avoid
    catching NSP and AccessDenied:
        for p in process_iter(attrs=['cpu_percent']):
            print(p.cache['cpu_percent'])
    This also leads questions as whether we should introduce a sorting order.

  * round Process.memory_percent() result?

  * #550: number of threads per core.

  * Have psutil.Process().cpu_affinity([]) be an alias for "all CPUs"?


COMPATIBILITY BREAKAGE
======================

Removals (will likely happen in 2.2):

 * (S) psutil.Process.nice  (deprecated in 0.5.0)
 * (S) get_process_list  (deprecated in 0.5.0)
 * (S) psutil.*mem* functions  (deprecated in 0.3.0 and 0.6.0)
 * (M) psutil.network_io_counters  (deprecated in 1.0.0)
 * (M) local_address and remote_address Process.connection() namedtuple fields
       (deprecated in 1.0.0)


REJECTED IDEAS
==============

STUB